冒泡、插入、选择排序
冒泡排序:空间复杂度O(1),稳定的排序算法,最好时间复杂度O(n),平均时间复杂度O(n^2)
插入排序:空间复杂度O(1),稳定的排序算法,最好时间复杂度O(n),平均时间复杂度O(n^2)
选择排序:空间复杂度O(1),不稳定的排序算法,最好时间复杂度O(n^2),平均时间复杂度O(n^2)
思考:为什么插入排序要比冒泡排序更受欢迎?
- 冒泡排序不管怎么优化,元素交换的次数是一个固定值,是原始数据的逆序度。插入排序是同样的,不管怎么优化,元素移动的次数也等于原始数据的逆序度。
- 但是从代码实现上看,冒泡排序的数据交换要比插入排序的数据移动要复杂,冒泡排序需要3个赋值操作,而插入排序只需要1个。
冒泡排序中数据的交换操作:
if (a[j] > a[j+1]) { // 交换
int tmp = a[j];
a[j] = a[j