Python找出最小的K个数实例代码


Posted in Python onJanuary 04, 2018

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复杂度性的考虑。以下几种思路当是笔者抛砖引玉,如果读者有兴趣可以自己再使用其他方法一一尝试。

思路1:利用冒泡法

临近的数字两两进行比较,按照从小到大的顺序进行交换,如果前面的值比后面的大,则交换顺序。这样一趟过去后,最小的数字被交换到了第一位;然后是次小的交换到了第二位,。。。,依次直到第k个数,停止交换。返回lists的前k个数(lists[0:k],前闭后开)

思路2:使用快排中的partition思想。

①我们设定partition函数的哨兵为key=lists[left],在partition函数中完成一轮比较的结果是,比key大的数都在其右边,比key小的数放在其左边。完成该轮后返回其left=right时left的值。

②我们判断left的值是比k大还是小:

如果left的值比k大,说明上轮partition之后,lists中前left个小的数在左边,其余的数在其右边,我们还需要把寻找范围缩小,下次找的时候只在数组前面left个数中找了。

如果left的值比k小,说明上轮partition之后,前left个数找的太少了,我们需要再往数组的后面找。

# -*- coding: utf-8 -*- 
""" 
Date: Tue Sep 19 10:50:11 2017 
 
Created by @author: xiaoguibao 
 
E-mail: mingliumengshao@163.com 
 
Content: 找最小的k个数 
 
""" 
def function1(lists,k): 
#  冒泡法 
  length = len(lists) 
  for i in range(k): 
    for j in range(i+1,length): 
      if lists[i] > lists[j]: 
        lists[j],lists[i] = lists[i],lists[j] 
  return lists[0:k] 
 
""" 
思路2 包括2个部分function2_partion和function2 
""" 
 
def function2_partion(lists,left,right): 
  #划分函数处理部分 
  key = lists[left] 
  while left < right: 
    while left < right and lists[right] >= key: 
      right -= 1 
    lists[left] = lists[right] 
    while left < right and lists[left] <= key: 
      left += 1 
    lists[right] = lists[left] 
  lists[right] = key 
  return left 
def function2(lists,k): 
  #划分法主要函数部分 
  length = len(lists) 
  left = 0 
  right = length - 1 
  index = function2_partion(lists,left,right) 
  while k!=index: 
    if index > k-1: 
      right = index-1 
    else: 
      left = index+1 
    index = function2_partion(lists,left,right)  
  return lists[0:k] 
 
def main(): 
  lists = [1,1,6,4,11,9,2,10,3] 
#  print "思路一(冒泡法):",function1(lists,8) 
  print "思路二(划分法):",function2(lists,8) 
if __name__=="__main__": 
  main()

总结

以上就是本文关于Python找出最小的K个数实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
用Python编写简单的定时器的方法
May 02 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
Python ldap实现登录实例代码
Sep 30 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
Nov 07 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
详解python深浅拷贝区别
Jun 24 Python
python区分不同数据类型的方法
Oct 14 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
python中JWT用户认证的实现
May 18 Python
基于Python实现粒子滤波效果
Dec 01 Python
python爬虫请求头的使用
Dec 01 Python
Python编程把二叉树打印成多行代码
Jan 04 #Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 #Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 #Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 #Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 #Python
python实现简易云音乐播放器
Jan 04 #Python
Python语言描述连续子数组的最大和
Jan 04 #Python
You might like
Php图像处理类代码分享
2012/01/19 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
php生成图片验证码的方法
2016/04/15 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
详解Python sys.argv使用方法
2019/05/10 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
Python中Selenium模块的使用详解
2020/10/09 Python
华为python面试题
2016/05/03 面试题
现金会计岗位职责
2013/12/05 职场文书
校园报刊亭的创业计划书
2014/01/02 职场文书
新年联欢会主持词
2014/03/27 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
react 项目中引入图片的几种方式
2021/06/02 Javascript
Go语言应该什么情况使用指针
2021/07/25 Golang
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python
MySQL 原理与优化之Update 优化
2022/08/14 MySQL
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS