398 字
2 分钟
冒泡排序

冒泡排序(Bubble sort)#

从左到右,两两比较,左边比右边大就交换,反之不变,直到遍历到最后一个,最后一个肯定是数组中最大的元素,然后开始下一次循环,直到外层循环遍历结束整个数组排序完成。

C++代码如下:

#include<stdio.h>
#include<iostream>
using namespace std;
int main() {
int n = 5;
int a[5] = {2, 5, 3, 4, 1};
for (int j = n - 1; j >= 0; --j) {//双层循环遍历
for (int i = 0; i < j; ++i) {
if (a[i] > a[i + 1]) {
swap(a[i], a[i + 1]);
}
}
}
for (int i = 0; i < n; ++i) {//输出排序后的数组
cout << a[i] << " ";
}
return 0;
}

冒泡排序优化#

当数组在整个遍历过程中没有发生交换,说明待排序数组已经是有序的了,此时可以直接用break结束排序过程。

C++代码如下:

#include<stdio.h>
#include<iostream>
using namespace std;
int main() {
int n = 5;
int a[5] = {2, 5, 3, 4, 1};
bool flag = true;//默认设定代表数组已经有序
for (int j = n - 1; j >= 0; --j) {//双层循环遍历
flag = true;//每次开始外层循环都要把flag重新赋值一次
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;
}
}
for (int i = 0; i < n; ++i) {//输出排序后的数组
cout << a[i] << " ";
}
return 0;
}
冒泡排序
https://fuwari.cbba.top/posts/冒泡排序/
作者
Chen_Feng
发布于
2023-02-18
许可协议
CC BY-NC-SA 4.0