python最大的k个数_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、付费专栏及课程。

余额充值