1. 基本思想
每趟从前往后(或从后往前)两两比较相邻元素的值,若为逆序(即A[ j ]>A[ j+1]),则交换它们,最后的元素一定是最大的。
一共进行n-1趟就可以排序成功
2. 代码案例
#include<iostream>
using namespace std;
//交换a,b的值
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
//冒泡排序
void bubbleSort(int arr[], int n) {
bool tag = true; //标记是否已经有序
for (int i = 0; i < n - 1; i++) { //一共进行n-1趟
tag = true;
for (int j = 0; j < n - i - 1; j++) { //将最大元素放最后
if (arr[j] > arr[j + 1]) {
tag = false;
swap(arr[j], arr[j + 1]);
}
}
if (tag) { //已有序直接退出
return;
}
}
}
int main() {
int arr[] = { 0,1,3,2,8,7,4 };
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
3. 运行结果
4. 时间复杂度
最好情况:O(n)
最坏情况:O(n^2)
平均:O(n^2)
5. 空间复杂度
O(1)
6. 稳定性
稳定