内部排序

来源:互联网 发布:安卓平台c语言编译器 编辑:程序博客网 时间:2024/05/17 02:00

各种排序算法比较

排序方法 时间复杂度 空间复杂度稳定性复杂性 平均情况最坏情况最好情况   直接插入排序O(n*n)O(n*n)O(n)O(1)稳定简单希尔排序O(nlog2n)O(nlog2n) O(1)不稳定较复杂起泡排序O(n*n)O(n*n)O(n)O(1)稳定简单快速排序O(nlog2n)O(n*n)O(nlog2n)O(log2n)不稳定较复杂直接选择排序O(n*n)O(n*n)O(n*n)O(1)不稳定简单堆排序O(nlog2n)O(nlog2n)O(nlog2n)O(1)不稳定较复杂归并排序O(nlog2n)O(nlog2n)O(nlog2n)O(n)稳定较复杂基数排序O(d(n+r))O(d(n+r))O(d(n+r))O(n+r)稳定较复杂

 

(1)从平均时间性能而言,快速排序最好,但快速排序最坏情况下性能不如堆排序和归并排序。后两者,在n较大时,归并排序较好,但它所需辅助空间较多。

(2)当序列中的记录,基本有序时,以直接插入排序为最佳!

(3)一般来说,排序过程中的“比较”是在“相邻的2个记录关键字”之间进行的排序方法,是稳定的。由于大多数情况下,排序是按照记录的主关键字进行的,因此排序方法是否稳定无关紧要。若排序按记录的次关键字进行,则应选择稳定的排序方法。

(4)基数排序适应于n很大,而关键字较小的序列。若,关键字也很大,则亦可先按“最高位关键字”排序,分成若干“小”的序列,而后进行直接插入排序。