鱼C论坛

 找回密码
 立即注册
查看: 1376|回复: 5

[已解决]冒泡数组输出有问题

[复制链接]
发表于 2023-4-21 12:45:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
int main(){
    int a[100],n,i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=1;i<=n-1;i++){
        for(j=1;j<=n-i;j++){
            if(a[j]<a[j+1]){
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
          }
        }
     for(i=0;i<n;i++){
         printf("%d",a[i]);
         }
   return 0;
}
最佳答案
2023-4-21 12:57:49
这段代码是一个冒泡排序算法的实现,但是在输出有些问题。我发现了两个错误:

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

我对代码进行了修正,现在它应该正常工作了:
#include <stdio.h>
int main(){
    int a[100],n,i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(a[j]<a[j+1]){
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}

现在,这个代码会根据用户输入的数字n,接收n个整数并以降序冒泡排序。排序后,输出数组元素,元素之间有空格,并且在所有元素输出完后换行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-21 12:57:49 | 显示全部楼层    本楼为最佳答案   
这段代码是一个冒泡排序算法的实现,但是在输出有些问题。我发现了两个错误:

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

我对代码进行了修正,现在它应该正常工作了:
#include <stdio.h>
int main(){
    int a[100],n,i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(a[j]<a[j+1]){
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}

现在,这个代码会根据用户输入的数字n,接收n个整数并以降序冒泡排序。排序后,输出数组元素,元素之间有空格,并且在所有元素输出完后换行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-21 13:08:44 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-4-21 12:57
这段代码是一个冒泡排序算法的实现,但是在输出有些问题。我发现了两个错误:

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

第8行写成i=1;i<n–1;i++为什么不可以怎么写,不理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-21 13:13:30 | 显示全部楼层

你可以使用`i=1;i<n;i++`,但你需要相应地调整内层循环。如果你使用`i=1;i<n;i++`,那么内层循环的条件应该是`j=0;j<=n-i;j++`,这样的话,也能得到正确的结果。这是修改后的代码:
#include <stdio.h>
int main(){
    int a[100],n,i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=1;i<n;i++){
        for(j=0;j<=n-i;j++){
            if(a[j]<a[j+1]){
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}

使用`i=1;i<n;i++`是可以的,关键是要确保内外循环的边界条件正确,以便进行正确的比较和交换。在这种情况下,你需要确保内层循环的边界条件与外层循环同步。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 11:13:58 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-4-21 13:13
你可以使用`i=1;i

j<=n-i,应该不行,j=9的时候越界了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 11:19:27 | 显示全部楼层
remake111 发表于 2023-4-22 11:13
j<=n-i,应该不行,j=9的时候越界了

你先试了再说行不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表