【发布时间】:2020-06-03 22:59:41
【问题描述】:
首先我是 C 的初学者,所以如果我的问题看起来很愚蠢,我很抱歉。 我正在学习如何在 C 中使用冒泡排序算法,我通过这段代码来了:
#include <stdio.h>
int main() {
int ctr, inner, outer, didSwap, temp;
int nums[10] = {
78,
16,
21,
7,
13,
9,
22,
52,
67,
19
};
//Listing the array before sorting
for (ctr = 0; ctr < 10; ctr++) {
printf("%d\n", nums[ctr]);
}
//Sorting the arrays
for (outer = 0; outer < 9; outer++) {
didSwap = 0;
for (inner = outer; inner < 10; inner++) {
if (nums[inner] < nums[outer]) {
temp = nums[inner];
nums[inner] = nums[outer];
nums[outer] = temp;
didSwap = 1;
}
}
if (didSwap == 0) {
break;
}
}
//Listing the array after sorting
printf("\n\nThis is the sorted array\n");
for (ctr = 0; ctr < 10; ctr++) {
printf("%d\n", nums[ctr]);
}
return 0;
}
代码运行良好,但我想了解的是在第二个 for 循环中它是如何编写的inner = outer,在下一个 if 语句中它正在比较数组的元素是否其中一个具有相同的数字作为内部,另一个与外部具有相同的编号。
既然我们说inner = outer,这意味着我们正在比较相同的元素。
我的想法是,如果outer = 0,并且由于inner = outer,那么inner 也将是0,所以下一个if 语句将是if (nums[0] < nums[0]),这没有任何意义。
我知道我可能错了,因为代码运行良好,但我认为哪里错了?
提前致谢。
【问题讨论】:
-
您应该立即养成正确缩进和对齐代码的习惯。缩进不当的代码很难阅读,即使对于编写它的人来说也是如此。
-
是的,它似乎应该是
for (inner = outer + 1; ...。虽然这不会破坏代码,只是通过一加基本上毫无意义的迭代使其不太理想。 -
当
inner == outer,那么循环体什么都不做,所以完全没问题。 -
不是答案,但您可以使用标准
i和j而不是outer和inner -
这对
int nums[10] = { 1, 10, 9, 8, 7, 6, 6, 4, 3, 2 } ;有什么作用?
标签: c arrays algorithm sorting bubble-sort