std :: sort()使用在快速和快速之间切换的Introsort algorithm 。堆排序取决于当前的分区比率。
实施Median-of-Medians Quicksort代替Introsort是否存在实际缺点?毕竟,理论上很难对排序算法的混合进行建模。计算它们最坏的情况 - 尽管我假设Introsort是O(N log N)。
答案 0 :(得分:2)
请参阅Musser关于Introsort的原始论文。基本上,虽然Medians of Medians和Introsort是渐近相同的,但是Introsort每个项目的工作量不那么稳定,并且通常更快。本文确实提到中位数中位数可以作为后备排序而不是堆排序。
David R. Musser。内省的排序和选择算法。 [Postscript version]
答案 1 :(得分:0)
从我记忆中来看,Quicksort对已排序或非常接近排序的集合表现不佳 - O(n ^ 2)。查看维基百科在Introsort上的页面 - 在Introsort vs. Quicksort上有一个引人注目的统计数据。