算法种类 | 时间复杂度 | 空间复杂度 | 是否稳定 | ||
最好情况 | 平均情况 | 最坏情况 | |||
直接插入排序 | O(n) | O(n²) | O(n²) | O(1) | 是 |
冒泡排序 | O(n) | O(n²) | O(n²) | O(1) | 是 |
简单选择排序 | O(n²) | O(n²) | O(n²) | O(1) | 否 |
快速排序 | O(nlog2n) | O(nlog2n) | O(n²) | O(nlog2n) | 否 |
堆排序 | 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(r) | 是 |
排序算法应用总结
- 若n较小,可以使用直接插入排序或者是简单选择排序(信息量较大时优先)
- 若初始序列基本有序,则使用直接插入排序或者冒泡排序
- 若n较大,且初始序列基本随机分布,则快速排序性能最好
- 若n较大但要求稳定性,则使用归并排序
- 若n很大很大,关键字位数较少且可以分解,则采用基数排序