【发布时间】:2013-11-06 00:49:10
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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("\nHere is the list before the sort:"); for (ctr=0; ctr < 10; ctr++) {
printf("%d\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("\nHere is the list after the sort:"); for(ctr = 0; ctr < 10; ctr++) {
printf("%d\n", nums[ctr]);
}
return 0;
}
我不明白这部分:
for(outer = 0; outer < 9; outer++) {
didSwap = 0;
for (inner = outer; inner < 10; inner++) {
if (nums[inner] < nums[outer])
...
}
}
如果outer = 0 和inner = outer 则inner 和outer 都等于0。如果循环FOR 显示if (nums[inner] < nums[outer])
那么 nums[0] 怎么能比 nums[0] 小,因为内部和外部都 = 0?请帮我理解。
伙计们,我认为我的教科书代码有问题。你觉得呢?
现在问题在于BREAK。你认为它在正确的地方吗?
如果 (didSwap == 0) { 休息; }
现在的问题是,如果第一个两个数组值按升序排列,而 NUMS[] 的其余元素是随机的,那么在内部循环的第一次迭代之后,它将破坏外部循环,因为 didSwap 仍将等于零。
我尝试像这样手动初始化 NUMS[]..
int nums[10]={4,6,8,65,47,74,21,22,65,36};
请看一下...谢谢
【问题讨论】:
-
我不妨先看看formatting guide,让这个问题更容易阅读。
-
对不起,我首先不明白如何在这里发布代码。
-
@Arif,嘿,你还需要帮助吗?
-
@JulianKhlevnoy 我在您的个人资料中查找了您的电子邮件地址。但它不在那里。如果你不介意,我还有一些问题。
-
@Arif,我不介意。我的电子邮件在我的答案下方的最后一条评论中。通过电子邮件交谈会更加舒适和轻松。
标签: c bubble-sort