Python提取TOP排名,用插入排序法和二分法排序比较

这篇博客探讨了在Python中如何快速找到大量数据的前n个最大值。作者比较了插入排序法和二分法,发现对于TOPn与总数数量级相近的情况,二分法更快;而当取样较少时,插入排序更优。在测试中,iso_insert_sort(优化后的插入排序)表现出最好的性能,但二分法在特定场景下更具优势。代码实现和测试结果也在文中进行了详细展示。
摘要由CSDN通过智能技术生成

题目:如果有1000个分值,需要快速找到前10个是什么(并排序),怎么算更快


本人想到的是插入排序法:先将前10个排序作为初步结果(default_list),然后对剩余990个(rest_list)进行循环,每个值(rest_number)与default_list中的值比较,如果比里面的某个值大,那么删掉里面最小的。保持default_list只有10个值。等rest_list循环完毕,那么最终default_list结果TOP10。

里面有个细节

1  本人想到利用python自带的sorted函数,自认为是个比较慢的排序函数,但是对于10个值的排序,性能影响不大。于是我想到,开始就对default_list排序,这样最小值就是default_list[0],不需要再看其他的了。即rest_number>default_list[0],则说明结果会发生变化。去掉default_list[0],加上rest_number。但是,rest_number不一定是最小的,所以改变后需要再次排序,这就产生了我写的第一个函数insert_sort

2 如果不用sorted函数,严格按照插入排序,也就是需要找出到底rest_number排在哪个地方,于是要费点心思多写几行代码。默认sort是从小到大,假设是

[1,2,3,4,6,7,8,9,10,11],插入个5。个人喜欢用大于号,所以就从右往左对比,找到rest_number>default_list[i](i=3)。还得去掉最左边的值(最小,所以得去掉),所以新的列表是[1:i+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值