给定待排序数组
数组中的元素:4 2 8 0 5 7 1 3 9
算法步骤:
1.比较相邻的元素,如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值
3.重复以上的步骤,每次比较次数-1,直到不需要比较。
补充:
实现交换的方式,先将第一个元素进行保存,随后将第二个数覆盖到第一个数的位置,然后再将第第一个数放到第二个数的位置。
排序轮数
初始状态:4 2 8 0 5 7 1 3 9
对比次数:8次
第一轮交换完成:
可以看到9这个数字出现在了最底层,最大的数字已经找到。
第二轮交换完成:
对比次数:7次
第三轮交换完成:
对比次数:6次
第四轮交换完成:
对比次数:5次
以此类推最终排序结果: 0 1 2 3 4 5 6 7 8 9
排序的总轮数=元素的个数-1
每轮对比的次数=元素个数-排序轮数-1
代码实现:
#include <iostream>
using namespace std;
//利用冒泡排序实现升序序列
int main() {
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
cout << "排序前:" << endl;
for (int i = 0; i < 9; i++) {
cout << arr[i] << " ";
}
cout << endl;
//开始冒泡排序
//总共排序轮数=元素个数-1
for (int i = 1; i < 9 - 1; i++) {
//内层循环对比,次数=元素个数 - 当前轮数 - 1
for (int j = 0; j < 9 - i - 1; j++) {
//如果第一个数字比第二个数字大,交换这两个数字
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//排序后结果
cout << "排序后:" << endl;
for (int i = 0; i < 9; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
注意内层循环和外层循环的次数。