各种排序方法的性能比较:
排序方法 |
|
时间复杂度 |
|
稳定性 |
辅助空间 |
|
|
平均情况 |
最好情况 |
最坏情况 |
|
|
特性 |
直接插入排序 |
O(n*n) |
O(n) |
O(n*n) |
稳定 |
O(1) |
适合规模较小的,基本有序的 |
折半插入排序 |
O(n*n) |
O(n) |
O(n*n) |
不稳定 |
O(1) |
比较次数比直接插入少 |
希尔排序 |
O(n*logn) |
尚未解决的难题 |
O(n*logn) |
不稳定 |
O(1) |
速度较快,适用规模大的 |
冒泡排序 |
O(n*n) |
O(n) |
O(n*n) |
稳定 |
O(1) |
适合基本有序的 |
快速排序 |
O(n*logn) |
O(n*logn) |
O(n*n) |
不稳定 |
O(logn)形成递归栈 |
是速度“最快”的,适用规模大的 |
直接选择排序 |
O(n*n) |
O(n*n) |
O(n*n) |
不稳定 |
O(1) |
适合规模较小的 |
堆排法 |
O(n*logn) |
O(n*logn) |
O(n*logn) |
不稳定 |
O(1) |
速度较快,适用规模大的 |
归并排序 |
O(n*logn) |
O(n*logn) |
O(n*logn) |
稳定 |
O(n) |
一般不用于内部排序 |
基数排序 |
O(d(n+rd)) |
O(d(n+rd)) |
O(d(n+rd)) |
稳定 |
O(rd) |
实用与n较大而关键字较小的序列 |