在最差情况下复杂度仍然是O(nlogn)的排序算法是啥算法

被@pengpeng yao召唤答题。@charisna的图基本上是正确的,但是有些小错误.Shell希尔排序的复杂度和增量序列的选取有关,这张表一概而论是不合适的,并且表中的结果也不是目前最优的增量序列。快速排序的附加空间复杂度(不计原始数组),Wikipedia上写的是平均O(logn)最坏O(n)。但是如果选择较短的子序列递归,加上尾递归优化,我认为最坏附加空间复杂度可以优化到O(logn)归并排序的附加空间复杂度可以到O(logn),使用一种原地归并算法,一步归并时间O(n),只需要O(1)空间,但递归栈需要O(logn)。Wikipedia上说in-place版的merge sort比较慢需要 【在最差情况下复杂度仍然是O(nlogn)的排序算法是啥算法】 在最差情况下复杂度仍然是O(nlogn)的排序算法是啥算法
的时间,似乎也不对,估计它的in-place merge不是最优的。In-place merge的算法见http://www.dcs.kcl.ac.uk/technical-reports/papers/TR-04-05.pdf
■网友
最有名的有 - Heapsort - 刚知道原来叫堆排序, merge sort 归并排序, introsort内省排序 - 是一种heapsort 和quick sort的结合, patience sorting, smoothsort - heapsort一种变种,当序列已经接近排好的时候复杂度接近O(n) - 等等binary tree sort也是都是最坏情况。quicksort 平均是nlogn


    推荐阅读