gpt4 book ai didi

c - C 中的冒泡排序错误代码! [Deitel C 第 6 版]

转载 作者:行者123 更新时间:2023-11-30 19:37:32 25 4
gpt4 key购买 nike

int main(void)
{
int a[5] = {36,24,10,6,12};
int pass;
int i;
int hold;

/* bubble sort */
/* loop to control number of passes */

for(pass=1; pass<5; pass++){
/* loop to control number of comparisons per pass */
for(i=0; i<5; i++){
if(a[i] > a[i+1]){
hold = a[i];
a[i] = a[i+1];
a[i+1] = hold;
}
}
}

return 0;
}

在此冒泡排序程序中,if 语句比较相邻元素的值。如果计数器 I 变为 4,则 if 语句将是 if a[4] > a[4+1] 所以我的问题是数组中没有 a[5] 元素,那么程序如何进行比较和工作?

我不明白 for(pass=1; pass<5; pass++) 循环。这个循环有什么用?以及为什么循环从 1 开始并持续 4 次而不是 5 次。

有人请演示一下这个冒泡排序程序是如何工作的吗?干杯!

最佳答案

好吧,每个人都在评论中回答了这个问题,但没有人花时间写出实际的答案,所以我接受了这个角色。

首先,您粘贴的代码中有一个错误:
而数组 int a[5]有 5 名成员 [0..4],
执行内循环时for(i=0; i<5; i++)给定i=4 ,
a[i+1]正在访问a[5]它超出了数组的范围,并且它的值可能是意外的。
值得注意的是:因为示例值 int a[5] = {36,24,10,6,12};非常小,代码很有可能 (36/2^32) 无论如何都能工作,因为 a[5]将具有最大值,并且不会被覆盖或移动。

但如果您尝试将值更改为,比如说,int a[5] = {36,0xFFFFFFFF,10,6,12}; ,程序肯定会惨败!

第二个问题:
每次迭代(通过)时,最大值都会冒泡到它的位置,因此将就位......
对于 5 个数字,在将 4 放在其位置后,隐式给出最后一个数字。
这就是为什么不需要第五次迭代的原因。

此外,在第二次到最后一次迭代中,通常会从内部循环中排除最后一个元素,因为已知它们就位。

int main(void)
{
int a[5] = {36,24,10,6,12};
int pass;
int i;
int hold;

/* bubble sort */
/* loop to control number of passes */

for(pass=4; pass > 0; pass--){ /* pass counts down 4 iterations */
/* loop to control number of comparisons per pass */
/* 0..4, then 0..3 > 0..2, and lastly 0..1 */
for(i=0; i<pass; i++){
if(a[i] > a[i+1]){
hold = a[i];
a[i] = a[i+1];
a[i+1] = hold;
}
}
}
return 0;
}

关于c - C 中的冒泡排序错误代码! [Deitel C 第 6 版],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39731684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com