Blog
It's a Wonderful Life
冒泡算法内外层循环次数的控制问题
冒泡算法是一种常用的排序算法,其主要思路是构建一个嵌套循环结构。外层循环负责依次将数组中的每个元素挑选出来参与内层循环,内层循环负责比较每相邻两个元素的大小,并视情况将二者的位置互换。
值得注意的是,在代码实现的过程中,必须要注意内外层循环的次数(均为N - 1次),如果次数控制不当,会引起数组元素溢出的问题。
例如:
#include <stdio.h>
#define NUM 10
int main(void) {
printf("Please input %d numbers.\n", NUM);
int num[NUM], i, j, temp;
//从用户输入接受十个数字
for (i = 0; i < NUM; i++) {
scanf_s("%d", &num[i]);
}
//用冒泡法进行排序,控制外层循环
for (i = 0; i < NUM; i++) {
//控制内层循环
for (j = 0; j < NUM; j++) {
if (num[j] > num[j + 1]) {
temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
//输出排序后的数组
for (i = 0; i < NUM; i++) {
printf("%d ", num[i]);
}
printf("\n");
}
输入 9 8 7 6 5 4 3 2 1 0 并键入回车,程序会抛出运行时错误。 循环部分应写为:
//用冒泡法进行排序,控制外层循环
for (i = 0; i < NUM - 1; i++) {
//控制内层循环
for (j = 0; j < NUM - 1; j++) {
if (num[j] > num[j + 1]) {
temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}