上一篇 说了些堆的建立及其相关操作,这里看下用堆来解决数据量较大的时候,查找最小的k个数的情况。这里会用到上一篇中的函数。
我们先生存1千万个随机数,写到文件中:
import random
def 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 sys
def findMinK(k, filename = 'randint.txt'):
#init heapk with max int
heapk = [sys.maxint] * k
with 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
结果用了15 s,python慢,还是机器慢,狠心2块钱买个彩票,还被巴西坑了。。。。
【剑指offer】 堆排序查找最小的K个数,布布扣,bubuko.com
原文:http://blog.csdn.net/shiquxinkong/article/details/37740629