冒泡排序
原理:每次比较相邻的两个元素,然后在满足一定条件情况交换相邻两个元素
5 3 1 4 2
一趟冒泡(当前区间内,最大的一定会排在最后)
第一趟冒泡
i i+1
3 5 1 4 2
3 1 5 4 2
3 1 4 5 2
3 1 4 2 5
第二趟冒泡
3 1 4 2 5
1 3 4 2 5
1 3 2 4 5
第三趟冒泡
1 3 2 4 5
1 2 3 4 5
第四趟冒泡
i i+1
1 2 3 4 5
冒泡排序
时间复杂度(取决于运算的次数):O(n^2)
空间复杂度(取决于额外开辟的空间):O(1)
稳定性:稳定
cpp
void bubbleSort(int a[], int n) {
//外层j控制的每次需要冒泡的长度(每趟过后都会排好一个,长度--)
for (int j = n - 1; j >= 1; j--) {
//优化:当某一趟冒泡的时候已经有序,提前跳出循环
bool flag = true;//假设当前序列已经有序了
//内层i遍历当前区间,进行冒泡操作(当前区间的最后一个元素一定会排好)
for (int i = 0; i < j; i++) {
if (a[i] > a[i + 1]) {//冒泡操作(如果前者大于后者)
swap(a[i], a[i + 1]);//交换两个元素
flag = false;//证明此时序列可能还是无序的
}
}
if (flag == true) break;//证明此时序列是真的有序
}
}