如何分析一个“排序算法”?
排序算法的执行效率
1.最好情况、最坏情况、平均情况时间复杂度
2.时间复杂度的系数、常数 、低阶
3.比较次数和交换(或移动)次数
排序算法的内存消耗
算法的内存消耗可以通过空间复杂度来衡量,排序算法也不例外。原地排序算法,就是特指空间复杂度是O(1)的排序算法
排序算法的稳定性
经过某种排序算法排序之后,如果两个相等的数前后顺序没有改变,那我们就把这种排序算法叫作稳定的排序算法;如果前后顺序发生变化,那对应的排序算法就叫作不稳定的排序算法。
排序方式 | 平均复杂度 | 最坏复杂度 | 最好复杂度 | 空间复杂度 | 稳定性 | 是否原地排序 | 复杂度 |
冒泡 | O(n2) | O(n2) | O(n) |
O(1) | 稳定 | 是 | 简单 |
插入 | O(n2) | O(n2) | O(n) | O(1) | 稳定 | 是 | 简单 |
选择 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 | 是 | 简单 |
归并 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 | 否 | 较复杂 |
快速 | O(nlogn) | O(n2) | O(nlogn) | O(1) | 不稳定 | 是 | 较复杂 |
桶 | O(n) | - | - | - | 稳定 | 否 | 较复杂 |
计数 | O(n+k) k是数据范围 | - | - | - | 稳定 | 否 | 较复杂 |
基数 | O(dn) d是维度 | - | - | - | 稳定 | 否 |