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 相关文章推荐
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
python爬虫之urllib3的使用示例
Jul 09 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
python 读取修改pcap包的例子
Jul 23 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
Apr 14 Python
python代码如何注释
Jun 01 Python
Python使用Matlab命令过程解析
Jun 04 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
360搜索引擎自动收录php改写方案
2018/04/28 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
javascript加号&quot;+&quot;的二义性说明
2013/03/04 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
Python 命令行参数sys.argv
2008/09/06 Python
Python标准库之循环器(itertools)介绍
2014/11/25 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
学生会副主席竞聘书
2014/03/31 职场文书
经管应届生求职信范文
2014/05/18 职场文书
讲党性心得体会
2014/09/03 职场文书
六查六看心得体会
2014/10/14 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
趣味运动会广播稿
2015/08/19 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL