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发送各种形式的邮件的方法汇总
Nov 09 Python
Python简单实现enum功能的方法
Apr 25 Python
python计算auc指标实例
Jul 13 Python
Python 查看文件的编码格式方法
Dec 21 Python
获取python文件扩展名和文件名方法
Feb 02 Python
pandas带有重复索引操作方法
Jun 08 Python
启动Atom并运行python文件的步骤
Nov 09 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 Python
python源文件的字符编码知识点详解
Mar 04 Python
python实现ROA算子边缘检测算法
Apr 05 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
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
php修改数组键名的方法示例
2017/04/15 PHP
php实现微信模板消息推送
2018/03/30 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
在Python中增加和插入元素的示例
2018/11/01 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
全球立体声:World Wide Stereo
2018/09/29 全球购物
一年级学生期末评语
2014/04/21 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
民间借贷借条如何写
2015/05/26 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫