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操作MySQL数据库具体方法
Oct 28 Python
Python实现将n个点均匀地分布在球面上的方法
Mar 12 Python
在Python的Flask框架中使用日期和时间的教程
Apr 21 Python
Python字符串拼接、截取及替换方法总结分析
Apr 13 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
Python验证文件是否可读写代码分享
Dec 11 Python
Python动刷新抢12306火车票的代码(附源码)
Jan 24 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
python3之模块psutil系统性能信息使用
May 30 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
matplotlib部件之套索Lasso的使用
Feb 24 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
咖啡知识大全
2021/03/03 新手入门
CodeIgniter多语言实现方法详解
2016/01/20 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
python之列表推导式的用法
2019/11/29 Python
pytorch构建多模型实例
2020/01/15 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
C#和SQL Server的面试题
2016/08/12 面试题
《童年》教学反思
2014/02/18 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
药店营业员岗位职责
2015/04/14 职场文书
烈士陵园观后感
2015/06/08 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
GPU服务器的多用户配置方法
2022/07/07 Servers