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

题目:如果有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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值