为什么quicksort的平均速度比其他人快?

时间:2010-11-26 22:46:43

标签: arrays algorithm performance sorting quicksort

众所周知,快速排序性能平均为O(n * log(n)),但合并和堆性能平均也是O(n * log(n))。所以问题是为什么quicksort的平均速度更快。

3 个答案:

答案 0 :(得分:9)

Wikipedia suggests

  

通常,快速排序显着   在实践中比其他O(nlogn)更快   算法,因为它的内循环可以   大多数人都能有效地实施   架构,在大多数现实世界中   数据,可以进行设计   最小化概率的选择   要求二次时间。   此外,quicksort倾向于   优秀的内存使用   等级,充分利用   虚拟内存和可用缓存。   虽然quicksort不是就地的   排序和使用辅助内存,它是   非常适合现代计算机   架构。

同时查看同一页面上的comparison with other sorting algorithms

另请参阅CS网站上的Why is quicksort better than other sorting algorithms in practice?

答案 1 :(得分:3)

Timsort可能是better选项,因为它针对通常排序时看到的数据类型进行了优化,在Python语言中,数据通常包含预先排序项的嵌入式“运行”。它最近也被Java采用。

答案 2 :(得分:3)

快速排序的最坏情况实际上比heapsort和mergesort更差, quicksort平均更快。

至于为什么,需要时间来解释,因此我将参考Skiena, The algorithm design manual.

总结quicksort vs merge / heapsort的引用:

  

当面对相同渐近复杂度的算法时,实现   详细信息和系统怪癖,如缓存性能和内存大小可能   很好地证明是决定性因素。   我们可以说的是,实验表明,正确实施的地方   quicksort实现得很好,通常比mergesort快2-3倍   堆排序。主要原因是最内层循环中的操作是   简单。但是,当我说“快速通道”时,如果你不相信我,我就无法与你争辩   快点。这个问题的解决方案不在于我们正在使用的分析工具。   最好的方法是实现算法和实验。