今天上午复习了一下《数据结构高分笔记》中的各个排序算法,现在先对各个排序算法的复杂度做一个整理。
1、各个排序算法复杂度分析
最坏情况 | 最好情况 | 平均情况 | 空间复杂度 | |
直接插入排序 | O(n^2) | O(n) |
O(n^2)
|
O(1) |
折半插入排序 | O(n^2) | O(n) | O(n^2) | O(1) |
希尔排序 | O(nlogn) | O(1) | ||
冒泡排序 | O(n^2) | O(n) | O(n^2) | O(1) |
快速排序 | O(n^2) | O(nlogn) | O(nlogn) | O(logn) |
直接选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) |
堆排序 | O(nlogn) | O(nlogn) | O(1) | |
二路归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) |
2、关于各个排序算法稳定性:快速排序、希尔排序、直接选择排序和堆排序是不稳定的排序算法,其它均为稳定的排序算法。
3、关于排序原理细节:
① 经过一趟排序,能够保证一个元素达到最终位置,这样的排序是交换类的那两种(冒泡排序和快速排序)和选择类那两种(直接选择排序和堆排序)。
② 排序方法的元素比较次数和原始序列无关的排序算法有:直接选择排序和折半插入排序。
③ 排序方法的元素比较次数和原始序列有关的排序算法有:交换类的排序。
4、借助于“比较”进行排序的算法,在最坏情况下能够达到的最好的时间复杂度为O(nlogn)。