各种排序方法的性能比较:
排序方法 |
| 时间复杂度 |
| 稳定性 | 辅助空间 |
|
| 平均情况 | 最好情况 | 最坏情况 |
|
| 特性 |
直接插入排序 | 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较大而关键字较小的序列 |