算法 | Best | B比较次数 | B移动次数 | B时间复杂度 | Worst | W比较次数 | W移动次数 | W时间复杂度 | 稳定性 | 空间辅助 |
---|---|---|---|---|---|---|---|---|---|---|
冒泡排序 | 正序 | n−1 | 0 | O(n) | 逆序 | n(n−1)2 | n(n−1)2 | O(n2) | 稳定 | O(1) |
简单选择排序 | 正序 | n(n−1)2 | 0 | O(n2) | 逆序 | n(n−1)2 | n-1 | O(n2) | 不稳定 | O(1) |
直接插入排序 | 正序 | n−1 | 0 | O(n) | 逆序 | (n+2)(n−1)2 | (n+4)(n−1)2 | O(n2) | 稳定 | O(1) |
希尔排序 | 正序 | - | 0 | O(n1.3) | - | - | O(n1.3) | 不稳定 | O(1) | |
堆排序 | - | - | O(nlogn) | - | - | - | O(nlogn) | 不稳定 | O(1) | |
归并排序 | - | - | O(nlogn) | - | - | - | O(nlogn) | 稳定 | O(n) | |
快速排序 | - | - | O(nlogn) | 有序 | n(n−1)2 | n-1次递归调用 | O(n2) | 不稳定 | O(logn)\~O(n) |
插入排序,冒泡排序和快速排序的排序趟数与序列的初始状态有关
堆排序和选择排序的排序次数与初始状态无关,即最好情况和最坏情况都一样