啊这啧啧啧 发表于 2023-4-21 12:45:30

冒泡数组输出有问题

#include <stdio.h>
int main(){
    int a,n,i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++){
      scanf("%d",&a);
    }
    for(i=1;i<=n-1;i++){
      for(j=1;j<=n-i;j++){
            if(a<a){
                t=a;
                a=a;
                a=t;
            }
          }
      }
   for(i=0;i<n;i++){
         printf("%d",a);
         }
   return 0;
}

isdkz 发表于 2023-4-21 12:57:49

这段代码是一个冒泡排序算法的实现,但是在输出有些问题。我发现了两个错误:

1. 在内层循环中,数组下标应该从0开始,而不是1。
2. 在输出时,数组元素之间缺少空格。

我对代码进行了修正,现在它应该正常工作了:

#include <stdio.h>
int main(){
    int a,n,i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++){
      scanf("%d",&a);
    }
    for(i=0;i<n-1;i++){
      for(j=0;j<n-i-1;j++){
            if(a<a){
                t=a;
                a=a;
                a=t;
            }
      }
    }
    for(i=0;i<n;i++){
      printf("%d ",a);
    }
    printf("\n");
    return 0;
}


现在,这个代码会根据用户输入的数字n,接收n个整数并以降序冒泡排序。排序后,输出数组元素,元素之间有空格,并且在所有元素输出完后换行。

啊这啧啧啧 发表于 2023-4-21 13:08:44

isdkz 发表于 2023-4-21 12:57
这段代码是一个冒泡排序算法的实现,但是在输出有些问题。我发现了两个错误:

1. 在内层循环中,数组下 ...

第8行写成i=1;i<n–1;i++为什么不可以怎么写,不理解

isdkz 发表于 2023-4-21 13:13:30

啊这啧啧啧 发表于 2023-4-21 13:08
第8行写成i=1;i

你可以使用`i=1;i<n;i++`,但你需要相应地调整内层循环。如果你使用`i=1;i<n;i++`,那么内层循环的条件应该是`j=0;j<=n-i;j++`,这样的话,也能得到正确的结果。这是修改后的代码:

#include <stdio.h>
int main(){
    int a,n,i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++){
      scanf("%d",&a);
    }
    for(i=1;i<n;i++){
      for(j=0;j<=n-i;j++){
            if(a<a){
                t=a;
                a=a;
                a=t;
            }
      }
    }
    for(i=0;i<n;i++){
      printf("%d ",a);
    }
    printf("\n");
    return 0;
}


使用`i=1;i<n;i++`是可以的,关键是要确保内外循环的边界条件正确,以便进行正确的比较和交换。在这种情况下,你需要确保内层循环的边界条件与外层循环同步。

remake111 发表于 2023-4-22 11:13:58

isdkz 发表于 2023-4-21 13:13
你可以使用`i=1;i

j<=n-i,应该不行,j=9的时候越界了

isdkz 发表于 2023-4-22 11:19:27

remake111 发表于 2023-4-22 11:13
j<=n-i,应该不行,j=9的时候越界了

你先试了再说行不行{:10_334:}
页: [1]
查看完整版本: 冒泡数组输出有问题