基本原理
- 比较相邻的元素,如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
- 重复以上的步骤,每次比较次数 - 1,直到不需要比较。
通过这种方法,我们可以得到以下排序过程:
image.png
经过分析,我们可以得到元素个数、排序轮数和对比次数之间的数学关系。这样就找到了代码的逻辑关系:
- 排序总轮教数= 元素个数 - 1。
- 每轮对比次数 = 元素个数 - 排序轮数 - 1。
代码实现
#include <iostream>
using namespace std;
int main()
{
int arr[] = {4, 2, 8, 0, 5, 7, 1, 3, 9};
int len = sizeof(arr) / sizeof(arr[0]); // 数组长度
for(int i = 0; i < len - 1; i++){
for(int j = 0; j < len - 1 - i; j++){
if(arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp; // 数组交换
}
}
}
for(int i = 0; i < len; i++){
cout << arr[i] << ' ';
}
}
image.png