比快更快——桶排序
Posted 王子鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比快更快——桶排序相关的知识,希望对你有一定的参考价值。
因为我刚上大学就看过《编程珠玑》这本书,第一章就介绍了这个思想,于是答案脱口而出,也因此顺利的拿到了很高的评价(当然笔试成绩可能也是名列前茅吧)。
在场的同学列举了各种排序,甚至提到线程、分布式,也有非常接近的靠谱答案,当然这些也都是知识的积累。最后面试官悠悠的说一句,同学们很踊跃,各种各样的方法都很不错,但最佳的答案有一位同学最开始已经答出来了……balabala
这个方法叫桶排序。因为印象中,不论是数据结构还是算法课上,桶排序都太过简单,可能学过,但大多数同学对它都不会有什么特别的印象。
快排 O(nlogn) 五千万的数据量 50000000*log50000000 其比较次数在十亿级别。
但是桶排序 O(n) 其性能接近于 I/O 性能,在这个问题下就会显得非常快。
一个更适合桶排序的例子是,假如试卷满分 100 分,有成千上万的考生成绩需要排序,我们就仅仅需要一个 100 多的数组即可完成排序。多快好省。
当时面试的时候,我并没有很坚定的坚持自己的思路,因为我没有真实地试过这个规模的数据。于是回到学校就兴冲冲的写了两段代码,快排和桶排序做了个对比。
手头上也没有趁手的 IDE,没法实时监测性能,但是大致的结果已经很明了了。
代码如下:
没有写注释,不过程序本身很简单,加载数组,两个排序各跑一次,记录耗时。
性能上没有我想象中的那样毫秒级。当然可能是其他的开销对结果的影响太大。
完成排序所花费的时间,耗时越低越好。
简单的看了一下内存消耗,快排内存占用少了一些,但是差距不大。
接下来我还会尝试下 python 内存监测模块 memory_profiler 等,获得更精确的结果,做进一步的了解。
闲来无事不如多花些时间想想问题本身,多读些书。很多东西说白了都简单得不得了,但说不定哪天就用上了呢?
图为《编程珠玑》某页
以上是关于比快更快——桶排序的主要内容,如果未能解决你的问题,请参考以下文章