文章目录
1 十大排序算法汇总
排序 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 | 稳定性 | 时间复杂度梯队 | 梯队内的比较 | 其他 |
---|---|---|---|---|---|---|---|---|
插入排序 | O(n) | O(n2) | O(n2) | O(1) | √ | 3 | 比较交换次数较少 | - |
冒泡排序 | O(n) | O(n2) | O(n2) | O(1) | √ | 3 | 比较交换次数较多 | 2处优化 |
选择排序 | O(n2) | O(n2) | O(n2) | O(1) | × | 3 | - | - |
希尔排序 | O(n1.3) | O(n log^2n) | O(n logn) | O(1) | × | 2 | - | 希尔增量 |
归并排序 | O(n logn) | O(n logn) | O(n logn) | O(n) | √ | 2 | - | - |
快速排序 | O(n logn) | O(n2) | O(n logn) | O(1) | × | 2 | - | 4种实现 |
堆排序 | O(n logn) | O(n logn) | O(n logn) | O(1) | × | 2 | 比较交换并非连续 | - |
桶排序 | O(n+b) | O(n2) | O(n+b) | O(n+b) | √ | 1 | - | - |
计数排序 | O(n+b) | O(n+b) | O(n+b) | O(b) | √ | 1 | - | 整数数列 |
基数排序 | O(r(n+b)) | O(r(n+b)) | O(r(n+b)) | O(n+b) | √ | 1 | - | 字符串数列 |
排序 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|
冒泡排序 | O(n2) | O(1) | √ |
选择排序 | O(n2) | O(1) | × |
插入排序 | O(n2) | O(1) | √ |
希尔排序 | O(n logn) | O(1) | × |
快速排序 | O(n logn) | O(1) | × |
归并排序 | O(n logn) | O(n) | √ |
b:桶的数量。
r:大数字或字符串的最大长度。
桶排序:遍历所有元素,遍历所有桶,所以时间复杂度为O(n+b);n个元素存于b个桶中,桶占空间,所以空间复杂度为O(n+b)。
计数排序:遍历所有元素,遍历所有桶,所以时间复杂度为O(n+b);n个元素的计数存于b个桶中,桶占空间,所以空间复杂度为O(b)。
基数排序:进行了r次计数排序,所以时间复杂度为O(r(n+b));空间复杂度为O(n+b)。