O(n^2)
本章我们介绍了三种基础排序算法:冒泡排序、选择排序、插入排序。
冒泡排序
冒泡排序有两种优化方式:
- 记录当前轮次是否发生过交换,没有发生过交换表示数组已经有序;
- 记录上次发生交换的位置,下一轮排序时只比较到此位置。
选择排序
选择排序可以演变为二元选择排序:
- 二元选择排序:一次遍历选出两个值——最大值和最小值;
- 二元选择排序剪枝优化:当某一轮遍历出现最大值和最小值相等,表示数组中剩余元素已经全部相等。
插入排序
插入排序有两种写法:
- 交换法:新数字通过不断交换找到自己合适的位置;
- 移动法:旧数字不断向后移动,直到新数字找到合适的位置。
不同点
选择排序是不稳定的,冒泡排序、插入排序是稳定的;
在这三个排序算法中,选择排序交换的次数是最少的;
在数组几乎有序的情况下,插入排序的时间复杂度接近线性级别。