【发布时间】:2019-06-20 22:46:26
【问题描述】:
为什么这个 for 循环打印/排序所有 10 个整数。 它以大于或等于 0 的 i = N - 1 开始,因此它继续进行下一个 for 循环。这里 J 是 1 小于或等于 i 所以它编译。
我遇到的问题是第一次迭代是 i = 9 和 j = 1, 8和2, 7和3, 6和4, 5和5 最后是 4 和 6(停止点),
其中 j 不小于或等于 i。它不应该只编译它运行的 5 次而不是它的 10 次。
#include <stdio.h>
int arr[10] = { 3,6,1,2,3,8,4,1,7,2};
void bubble(int a[], int N);
int main(void)
{
int i;
putchar('\n');
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
bubble(arr,10);
putchar('\n');
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
void bubble(int a[], int N)
{
int i, j, t;
for (i = N-1; i >= 0; i--)
{
for (j = 1; j <= i; j++)
{
if (a[j-1] > a[j])
{
t = a[j-1];
a[j-1] = a[j];
a[j] = t;
}
}
}
}
我没有想到的具体代码是
for (i = N-1; i >= 0; i--)
{
for (j = 1; j <= i; j++)
{
if (a[j-1] > a[j])
{
t = a[j-1];
a[j-1] = a[j];
a[j] = t;
}
}
}
结果正确并返回正确的排序整数数组
【问题讨论】:
-
j总是从 1 开始。 -
您可以尝试在 for 循环中使用 printf 语句,并在每次迭代中遍历 i 和 j 的内容,以了解逻辑是如何执行的。在您的情况下,无论 i 是什么,j 从 1 开始,并将从 1 执行到 i。
-
将“冒泡排序”打入您最喜欢的搜索引擎,以便您了解算法。然后试着理解代码。
-
每次外部迭代都将当前范围内最大的元素移动到末尾。
标签: c for-loop pointers bubble-sort