冒泡排序在C错误的代码![德特尔C第六版] int main(无效) { int a[5]={36,24,10,6,12}; 国际通行证; int i; int hold; /*气泡排序*/ /*循环以控制通过次数*/ 对于(pass=1;pass a[4+1],所以我的问题是数组中没有[5]元素,所以程序是如何比较和工作的

冒泡排序在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

我不明白(pass=1;pass好吧,每个人都在评论中回答了这个问题,但是没有人花时间写一个实际的答案,所以我会扮演这个角色

首先,您粘贴的代码中有一个Bug:
数组
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;
}