排序方法 平均时间 最坏时间 辅助存储
简单排序 O(n2) O(n2) O(1)
快速排序 O(nlogn) O(n2) O(logn)
堆排序 O(nlogn) O(nlogn) O(1)
归并排序 O(nlogn) O(nlogn) O(n)
基数排序 O(d(n+rd)) O(d(n+rd)) O(rd)
一、时间性能
快速排序平均时间最短,但是在按逆序排序的情况下将退化到O(n2)。
其次是归并排序和堆排序,n较大时归并排序比堆排序快,但是需要较多的辅助空间。
当基本有序时或n较小时,直接插入排序和起泡排序能达到O(n)的时间复杂度;而对于快速排序而言,这是最不好的情况,此时的时间性能蜕化为O(n2).简单选择排序、归并排序的时间性能不随记录序列中关键字的分布而改变,堆排序虽不稳定但最坏情况下的时间复杂度还是nlogn。
二、空间性能
所有的简单排序方法(包括:直接插入、起泡和简单选择)和堆排序的空间复杂度为O(1);
快速排序为O(logn),为栈所需的辅助空间;
归并排序所需辅助空间最多,其空间复杂度为O(n );
链式基数排序需附设队列首尾指针,则空间复杂度为O(rd)。
三、排序方法的稳定性能
快速排序和堆排序不稳定。
因此没有一个方法是一定最好的,要看实际情况。
参考:《数据结构(C语言版)》 严蔚敏