Python笔试题目:求最大的K个数子,解法三,适合大型数据集的情况

#coding=utf-8
 
 
## generate random numbers
from random import randint
# low and high limit of the numbers of the random number
low = -10000000
high = 10000000
 
low_big = 100000000
high_big = 200000000
 
# total_number of the numbers
total_number = 10000
#total_number = 100
# the number of beggest number we need
max_number = 100
# max_number = 5
 
# use  () for [] will be more efficient ?
# numbers = [randint(low,high) for elem in xrange(total_number)]
numbers_small = [randint(low,high) for elem in xrange(total_number-max_number)]
numbers_big = [randint(low_big, high_big) for elem2 in range(max_number)]
numbers = numbers_small + numbers_big
#print numbers
 
from heapq import heapify, heapreplace
max_number_heap = numbers[:max_number]  # [100,2,300,4,50]
heapify(max_number_heap)
#print max_number_heap
 
for num in xrange(max_number,total_number):
    data = numbers[num]
    if data > max_number_heap[0]:
        heapreplace(max_number_heap, data)
 
print 'result',max_number_heap
 
 
max_number_heap.sort()
numbers_big.sort()
if cmp(max_number_heap,numbers_big) == 0:
    print 'this algorithm works exactly right'
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值