冒泡排序在C错误的代码![德特尔C第六版] int main(无效) { int a[5]={36,24,10,6,12}; 国际通行证; int i; int hold; /*气泡排序*/ /*循环以控制通过次数*/ 对于(pass=1;pass a[4+1],所以我的问题是数组中没有[5]元素,所以程序是如何比较和工作的
我不明白(pass=1;pass好吧,每个人都在评论中回答了这个问题,但是没有人花时间写一个实际的答案,所以我会扮演这个角色 首先,您粘贴的代码中有一个Bug:冒泡排序在C错误的代码![德特尔C第六版] int main(无效) { int a[5]={36,24,10,6,12}; 国际通行证; int i; int hold; /*气泡排序*/ /*循环以控制通过次数*/ 对于(pass=1;pass a[4+1],所以我的问题是数组中没有[5]元素,所以程序是如何比较和工作的,c,algorithm,data-structures,C,Algorithm,Data Structures,我不明白(pass=1;pass好吧,每个人都在评论中回答了这个问题,但是没有人花时间写一个实际的答案,所以我会扮演这个角色 首先,您粘贴的代码中有一个Bug: 数组int a[5]有5个成员[0..4], 当为执行内部循环时(i=0;如果代码错误,它正在访问数组外部。您的代码不起作用。它有未定义的行为,因为它索引数组超出了范围。@Sairat有多容易?每个人都可能出错。有很多糟糕的编程书籍。在第八版中没有问题。循环转到i
数组
int a[5]
有5个成员[0..4],当为执行内部循环
时(i=0;如果代码错误,它正在访问数组外部。您的代码不起作用。它有未定义的行为,因为它索引数组超出了范围。@Sairat有多容易?每个人都可能出错。有很多糟糕的编程书籍。在第八版中没有问题。循环转到i
。您似乎不明白未定义行为的含义。请阅读。
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;
}
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;
}