我正在尝试学习 C 语言书中的冒泡排序算法。我似乎无法理解下面的代码中 int outer
和 int inner
是如何链接的nums
数组的哪个元素。比如 inner
如何变成 nums[0]
而 outer
变成 nums[1]
(如果我是对的), 然后通过循环进行?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int ctr, inner, outer, didSwap, temp;
int nums[10];
time_t t;
srand(time(&t));
for (ctr = 0; ctr < 10; ctr++)
{
nums[ctr] = (rand() % 99) + 1;
}
puts("\n Here is the list before the sort: ");
for (ctr = 0; ctr < 10; ctr++)
{
printf("%i\n", nums[ctr]);
}
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;
}
}
puts("\n Here is the list after the sort: ");
for ( ctr = 0; ctr < 10; ctr++)
{
printf("%i\n", nums[ctr]);
}
return 0;
}
最佳答案
inner
永远不会变成 nums[0]
。 inner
和outer
是数组索引,所以当inner
为0
时,nums[inner]
是 nums[0]
。
执行比较和交换的代码从不使用 inner
和 outer
,它使用 nums[inner]
和 nums[外部]
.
if (nums[inner] < nums[outer])
{
temp = nums[inner];
nums[inner] = nums[outer];
nums[outer] = temp;
didSwap = 1;
}
关于c - "inner"和 "outer"在此冒泡排序代码中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72651733/