码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】 堆排序查找最小的K个数

时间:2014-07-13 18:51:05      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:堆排序   python   algorithm   面试题   

上一篇 说了些堆的建立及其相关操作,这里看下用堆来解决数据量较大的时候,查找最小的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')


要找最小的k个数,我们该建立个大根堆还是小根堆呢? 应该是大根堆,想想。

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
			

这里是将堆用最大值初始化了,当然应该是从0开始插入,如果还没到k个,就直接插入,不用比较,否则要进行比较,这里为了方便,直接初始化了。

结果用了15 s,python慢,还是机器慢,狠心2块钱买个彩票,还被巴西坑了。。。。 



【剑指offer】 堆排序查找最小的K个数,布布扣,bubuko.com

【剑指offer】 堆排序查找最小的K个数

标签:堆排序   python   algorithm   面试题   

原文地址:http://blog.csdn.net/shiquxinkong/article/details/37740629

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!