冒泡排序是一种基础且常见的排序方法。其主要思路为从前到后遍历数组,一边比较一边向后两两交换,将最值冒泡到最后一位。
然而,在遍历过程中,存在还没有遍历完整个数组就已经排序完成的情况。举个例子,如果需要排序的数组是[1,2,6,3],我们希望将其从小到大排序,在第一轮排序完成之后,数组改变为[1,2,3,6],此时已排序完成,应当及时停止,不再进行之后的排序。针对这种情况,可以使用一个变量记录当前轮次的比较是否有交换发生,若没有,则代表数组已经有序,则停止排序。具体实现代码如下:
void bubble_sort(vector<int>& numset) {
bool f = true;
for (auto i = 0; i < numset.size() - 1; i++) {
if (!f) break;
f = false;
for (auto j = 0; j < numset.size() - 1 - i; j++) {
if (numset[j] < numset[j + 1]) {
int tem = numset[j];
numset[j] = numset[j + 1];
numset[j + 1] = tem;
f = true;
}
}
}
}