排序算法是笔面试中经常被问到的问题,本文主要总结各排序算法的时空复杂度,以做记录。
排序算法时间空间复杂度表
排序方法 | 平均时间 | 最坏时间 | 辅助空间 | 稳定性 |
---|---|---|---|---|
冒泡排序 | O(n^2) | O(n^2) | O(1) | 稳定 |
简单选择排序 | O(n^2) | O(n^2) | O(1) | 稳定 |
直接插入排序 | O(n^2) | O(n^2) | O(1) | 稳定 |
希尔排序 | O(nlog n) | O(n^2) | O(1) | 不稳定 |
堆排序 | O(nlog n) | O(nlog n) | O(1) | 不稳定 |
并归排序 | O(nlog n) | O(nlog n) | O(n) | 稳定 |
快速排序 | O(nlog n) | O(n^2) | O(nlog n) | 不稳定 |
基数排序 | O(d(n+r)) | O(d(n+r)) | O(n) | 稳定 |
注:基数排序中,d 为位数,r 为基数,n 为原数组个数。