类别 |
排序方法 |
平均情况 |
最好情况 |
最坏情况 |
辅助存储 |
稳定性 |
插入排序 |
直接插入 |
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))。