【剑指offer】 堆排序查找最小的K个数
来源:互联网 发布:java密码的正则表达式 编辑:程序博客网 时间:2024/06/13 21:42
上一篇 说了些堆的建立及其相关操作,这里看下用堆来解决数据量较大的时候,查找最小的k个数的情况。这里会用到上一篇中的函数。
我们先生存1千万个随机数,写到文件中:
import randomdef randData():with open('randint.txt', 'w') as fd:for i in range(1, 10000000):fd.write('%d ' %random.randint(1, 100))if i % 100 == 0:fd.write('\r')
import sysdef findMinK(k, filename = 'randint.txt'):#init heapk with max intheapk = [sys.maxint] * kwith open('randint.txt', 'r') as fd:line = fd.readline().strip().split()for i in range(len( line )):if heapk[0] > int( line[i] ):heapk[0] = int( line[i] )fixDown(heapk, 0, k, ls = 0)print heapk
这里是将堆用最大值初始化了,当然应该是从0开始插入,如果还没到k个,就直接插入,不用比较,否则要进行比较,这里为了方便,直接初始化了。
结果用了15 s,python慢,还是机器慢,狠心2块钱买个彩票,还被巴西坑了。。。。
0 0
- 【剑指offer】 堆排序查找最小的K个数
- 剑指Offer-30-最小的k个数-最大堆
- 堆排序(最小的K个数)
- 【java】堆排序 最小的k个数
- 剑指offer——最小的K个数(堆排或partition,复习排序算法思想精髓)
- 剑指offer:最小的k个数
- 【剑指offer】最小的k个数
- 剑指offer-30:最小的k个数
- 最小的k个数(剑指offer)
- 剑指offer--最小的K个数
- 剑指Offer之 - 最小的k个数
- 剑指offer-30 最小的K个数
- 剑指offer之最小的k个数
- 剑指offer 30 - 最小的k个数
- 《剑指offer》最小的K个数
- 【剑指Offer】最小的K个数
- 剑指offer—最小的K个数
- 剑指Offer-30-最小的k个数
- dialog 根据 edit box大小而变化
- 选择排序法
- 生活点滴记录
- [Asp.Net]MVP Demo
- VMware出现The connection for the USB device "###" was unsuccessful - Driver error原因
- 【剑指offer】 堆排序查找最小的K个数
- maven&nexus环境搭建
- Linux驱动编程 step-by-step (一)
- NO.4还不完善的分析类型程序,出自书上
- uva 123(排序、检索)
- 《C专家编程》学习笔记(为什么程序员无法分清万圣节和圣诞节)
- python当中的类和模块
- POJ 2406 Power Strings KMP运用题解
- 【Linux kernel】Timing