排序算法 | 最好时间 | 平均时间 | 最坏时间 | 辅助空间 | 是否稳定 |
直接插入 | n | n*n | n*n | 1 | 是 |
直接选择 | n*n | n*n | n*n | 1 | 否 |
冒泡 | n | n*n | n*n | 1 | 是 |
快速 | n*log(n) | n*log(n) | n*n | log(n) | 否 |
堆 | n*log(n) | n*log(n) | n*log(n) | 1 | 否 |
归并 | n*log(n) | n*log(n) | n*log(n) | n | 是 |
基数 | n | n | n | n+rd | 是 |
(1)插入、选择、冒泡
a. 插入和冒泡利用了“前面”的结果,而选择没有。
b. 就相邻元素比较交换算法而言,插入排序已经做到了最好。
(2)快速、堆、归并
a. 对于比较排序,不论何种算法,其W(n) >= O(n * log(n)), A(n) >= O(n * log(n)),即快速、堆、归并已经做到了最好。(使用判定树证明)
b. 严 《数据结构》P292 斯特林公式
n | 1 | 2 | 3 | 4 | 5 | 6 |
ceil(log n!) | 0 | 1 | 3 | 5 | 7 | 10 |
c. 当输入完全随机时,快速最快,堆最慢,归并居中。
d. 与插入相结合,当n<20时,使用插入排序,而不是快速排序。