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