类别 | 排序方法 | 平均情况 | 最好情况 | 最坏情况 | 辅助存储 | 稳定性 |
插入排序 | 直接插入 | 0(n2) | O(n) | 0(n2) | O(1) | 稳定 |
希尔排序 | 0(n1.3) | O(n) | 0(n2) | O(1) | 不稳定 | |
选择排序 | 直接选择 | 0(n2) | 0(n2) | 0(n2) | O(1) | 不稳定 |
堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(1) | 不稳定 | |
交换排序 | 冒泡排序 | 0(n2) | O(n) | 0(n2) | O(1) | 稳定 |
快速排序 | O(nlog2n) | O(nlog2n) | 0(n2) | O(nlog2n) | 不稳定 | |
归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 稳定 | |
基数排序 | O(d(n+rd)) | O(d(n+rd)) | O(d(n+rd)) | O(rd) | 稳定 |
简单排序:除希尔排序之外的所有插入排序、冒泡排序和直接选择排序,其中以直接插入排序最为简单).
插入排序:直接插入排序(稳定)、希尔排序(不稳定)
选择排序:直接选择排序(不稳定)、堆排序(不稳定)
交换排序:冒泡排序(稳定)、快速排序(不稳定)。
归并排序:稳定
基数排序:链式的基数排序(稳定),不需要进行关键字之间的比较。
在平均情况下和最坏情况下的时间复杂度是
一样的排序方法有:简单排序(除希尔排序之
外的所有插入排序、冒泡排序和直接选择排
序,其中以直接插入排序最为简单)――O(n2)、
堆排序(O(nlog2n))、归并排序O(nlog2n))、
基数排序(O(d(r+n)))。
1.从平均时间性能而言,快速排序最佳,其所需要的时间最省,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。而后两者相比较的结果是,在n较大时,归并排序所需要的时间较堆排序省,但它所需要的辅助存储量最多。
2.一般来说,排序过程中的“比较”是在“相邻的两个记录关键字”间进行的排序方法是稳定的。
3.任何一个借助“比较”进行排序的算法,在最坏情况下所需要进行的比较次数至少为。然而,这只是一个理论上的下届,一般的排序算法在n>4时所需进行的比较次数均大于此值。归并排序在n<11时所用的比较次数为。当需排序的数很多时,接近于O(nlog2n))。