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 相关文章推荐
Linux下用Python脚本监控目录变化代码分享
May 21 Python
Python设置Socket代理及实现远程摄像头控制的例子
Nov 13 Python
Python实现列表转换成字典数据结构的方法
Mar 11 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Python爬取梨视频的示例
Jan 29 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/10/31 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
Extjs入门之动态加载树代码
2010/04/09 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
python matplotlib画图实例代码分享
2017/12/27 Python
django如何自己创建一个中间件
2019/07/24 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
python Shapely使用指南详解
2020/02/18 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
药学专业大学生个人的自我评价
2013/11/04 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
篮球比赛口号
2014/06/10 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
Go语言读取txt文档的操作方法
2022/01/22 Golang
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js