题目传送门
思路:
冒泡排序( Bubble Sort )是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
根据以上的思路,可以敲出非常简洁的代码(含超详细代码注释)
CODE
#include <bits/stdc++.h>
using namespace std;
/* 冒泡排序(标志优化)*/
void bubbleSortWithFlag(vector<int> &nums) {
// 外循环:未排序区间为 [0, i]
// 初始时,整个数组都需要排序,所以i从数组长度减一开始
for (......) {
bool flag = false; // 初始化标志位,用于记录这一轮是否进行了交换
// 内循环:将未排序区间 [0, i] 中的最大元素交换至该区间的最右端
// j从0开始,因为我们要比较的是相邻的两个数字
for (......) {
// 如果当前数字比它后面的数字大,就交换它们的位置
if (......) {
swap(......);
flag = true; // 记录了这一轮有交换发生
}
}
// 如果这一轮没有发生任何交换,说明数组已经排好序了,可以提前结束
if (!flag)
break;
}
}
int main() {
int n;
cin >> n;
vector<int>v(n);
for (......) {
cin >> v[i];
}
bubbleSortWithFlag(v);
for (......) {
cout <<......<< " ";
}
return 0;
}
希望给你带来帮助,如果你 AC 了,请留下一个赞吧;如果没有 AC ,欢迎提问!!!