import time
import heapq
import random
def gen_large_arr(n):
arr = [i for i in range(n)]
random.shuffle(arr)
return arr
# find top n item from bigarray using liner search
def liner_search(bigarray, n):
return sorted(bigarray, reverse=True)[:n]
# using heap sort
def heap_search(bigarray, n):
heap = []
for elem in bigarray:
if len(heap) < n or elem > heap[0]:
if len(heap) == n:
heapq.heappop(heap)
heapq.heappush(heap, elem)
return heap
start = time.time()
bigarray = gen_large_arr(10 * 1000 * 1000)
print 'gen arr took %g s' % (time.time() - start)
start = time.time()
print liner_search(bigarray, 10)
print 'linear search took %g s' % (time.time() - start)
start = time.time()
print heap_search(bigarray, 10)
print 'heap search took %g s' %(time.time() - start)
堆排序解决 top k 问题
最新推荐文章于 2024-09-05 14:36:31 发布