### 思路
冒泡排序是一种简单的排序算法,通过重复地遍历待排序的列表,比较相邻的元素并交换它们的位置来排序列表。每次遍历会将最大的元素“冒泡”到列表的末尾。当在一趟遍历中没有发生任何交换时,排序结束。
### 伪代码
1. 读取输入的待排序关键字个数`n`。
2. 读取`n`个待排序关键字并存储在数组中。
3. 对数组进行冒泡排序:
- 初始化一个标志变量`swapped`为`True`。
- 当`swapped`为`True`时,进行以下操作:
- 将`swapped`设置为`False`。
- 遍历数组,比较相邻元素并交换它们的位置(如果前一个元素大于后一个元素)。
- 如果发生了交换,将`swapped`设置为`True`。
- 输出当前排序结果。
4. 重复步骤3直到`swapped`为`False`。
### C++代码
#include <iostream>
#include <vector>
using namespace std;
void bubbleSort(vector<int>& arr) {
int n = arr.size();
bool swapped = true;
while (swapped) {
swapped = false;
for (int i = 1; i < n; ++i) {
if (arr[i - 1] > arr[i]) {
swap(arr[i - 1], arr[i]);
swapped = true;
}
}
// 输出当前排序结果
for (int k = 0; k < n; ++k) {
if (k > 0) cout << " ";
cout << arr[k];
}
cout << endl;
}
}
int main() {
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
bubbleSort(arr);
return 0;
}
### 总结
冒泡排序通过重复地遍历待排序的列表,比较相邻的元素并交换它们的位置来排序列表。每次遍历会将最大的元素“冒泡”到列表的末尾。当在一趟遍历中没有发生任何交换时,排序结束。每趟排序后输出当前排序结果。