bubbleSort 冒泡排序
通俗理解:
想象你在水底吹气,气泡是不是向上冒?你扔一块石头到水里,它是不是往下沉。冒泡排序法就是利用这样的原理,
把大的数往地下沉,把较小的数往上冒。
例子:
例如有以下n=4个数 5 6 1 4 。我们把它竖着放,变成
5
6
1
4。
我们将第一个数5和第二个数6比,5比6小,所以不用换;接着将6和1比,因为6比1重,所以6往下沉,1往上冒,
变成
5
1
6
4。
接着拿6和4比,因为6比1重,所以6往下沉,4往上冒,变成
5
1
4
6。
这样我们就把最大那个数沉到底了,接下来进行第二次同样操作把倒数第二大的数沉到倒数第二个位置上去。
5和1比,5下沉,1往上冒,变成
1
5
4
6。
然后5和4比,5比4重,5往下沉,4往上冒,变成
1
4
5
6。
因为最大数6已经沉底,我们不需要将5和6进行比较。现在已经确定了倒数第二大的数,接下来确定倒数
第三大的数,也是同样从上往下比,但不需要涉及到和5相比,因为已经确定了它是倒数第二大的数。
1和4比,1比4小,所以不变。确定了倒数第三大的数4,然后确定倒数第四大的数1。
程序代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream>
using namespace std;
int main() {
int a[4] = {5, 6, 1, 4};
for(int i = 4 - 1; i >= 0; i--) //外层循环主要用于固定好已经确定的最大值,不要将其拿去比较
for(int j = 0; j < i - 1; j++) { //内层循环:从第一个元素开始往下执行
if(a[j] > a[j+1]) { //如果上比下大,则互换元素
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
for(int k =0; k < 4; k++) { //打印排好序的数组
cout << a[k] <<" ";
}
}