冒泡排序是非常经典的排序算法
比如有8个随机的数字,现在把他们升序排列(有小到大排列出来)。当然想到的就是两个比较。这样会有好多轮比较。
第一轮:从左往右开始,左边的和右边的比较,左边 > 右边,交换他们,然后接着向后比较。最后得到的就是这个最大值。
第二轮:剩余的七个数在进行比较,最后又得出一个最大值
最后一轮 剩余两个数 比较一次叫好了 得到一个最大值
看到上面的比较经过,我们发现有两个重要的参数
- 、排序 需要比较的轮数 = 元素的个数 - 1 (这里8个元素 需要比较7轮)
- 、每一轮中数据相互之间需要比较的次数 = 元素的个数 - 排序的轮数 - 1
可以参考下图
动态图演示
c++代码如下
#include<iostream>
using namespace std;
int main() {
//对一维数组进行冒泡排序
int arr[9] = { 2,4,0,5,7,1,3,8,9 };
cout << "排序前:" << " ";
for (int i = 0; i < 9; i++) {
cout << arr[i]<< " ";
}
cout << endl;
//冒泡排序(升序排列)
//一共排序轮数 = 元素个数 - 1
for (int i = 0; i < 9 - 1; i++) {
//每一轮 元素之间比较的次数 = 元素个数 -i -1
for (int j = 0; j < 9 - i - 1; j++) {
//开始比较左右元素之间的大小
if (arr[j] < arr[j + 1]) {
// 如果 if (arr[j] < arr[j + 1]) 就是降序排列
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 打印排序后的结果
cout << "排序后:" << "";
for (int i = 0; i <9; i++) {
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
排序结果:
升序:
降序排列