冒泡排序的本质在于交换,即每次通过交换的方式把当前剩余元素的最大值移动到一端,而当剩余元素减少为0时,排序结束。
整个过程执行 n-1 趟,每一趟从左到右依次比较相邻的两个数,如果大的数在左边,则交换这两个数,当该趟结束时,该趟最大数被移动到当前剩余数的最右边。 具体实现如下:
#include <cstdio>
int main() {
int a[10] = {3, 1, 4, 5, 2};
for (int i = 1; i <= 4; i++) { //进行n -1 趟
//第 i 趟时从 a[0] 到 a[n - i - 1] 都与它们下一个数比较
for (int j = 0; j < 5- i; j++) {
if (a[j] > a[j + 1]) { // 如果左边的数更大,则交换a[j] 和 a[j + 1]
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
printf("%d", a[i]);
}
return 0;
}
注意第2个 for 循环。
当第 i 趟时,从 a[0] 到 a[n - i - 1] 都只需要与下一个数比较。