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 相关文章推荐
Pyhton中防止SQL注入的方法
Feb 05 Python
pandas实现选取特定索引的行
Apr 20 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
Flask-Mail用法实例分析
Jul 21 Python
python实现逐个读取txt字符并修改
Dec 24 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
django的settings中设置中文支持的实现
Apr 28 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
详解Python多线程下的list
Jul 03 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 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守护进程类
2015/12/30 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
php支付宝APP支付功能
2020/07/29 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
Exjs 入门篇
2010/04/07 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
全面理解闭包机制
2016/07/11 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
ES6中数组array新增方法实例总结
2017/11/07 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
澳大利亚家具商店:Freedom
2020/12/17 全球购物
2014全国两会心得体会
2014/03/17 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
作弊检讨书范文
2015/05/06 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python