鱼C论坛

 找回密码
 立即注册
查看: 1356|回复: 4

[已解决]用冒泡法对10个数从小到大排序

[复制链接]
发表于 2021-3-15 11:39:25 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
void main()
{
int i,j,a[10],t;
printf("请输入10个数字:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<10;j++)
{
if(a[j]>a[j+1])
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(j=0;j<10;j++)
{
printf("%d\n",a[j]);
}

getchar();
getchar();
}

顺序排列是对的,但是后面会出现奇怪的乱码
求帮助!!!!
最佳答案
2021-3-15 12:11:37
本帖最后由 jackz007 于 2021-3-15 14:07 编辑
  1. for(j=0;j<10;j++)
  2. {
  3. if(a[j]>a[j+1])                     // j = 9 时,a[j + 1] = a[10] 下标越界
  4. t=a[j];
  5. a[j]=a[j+1];                        // j = 9 时,a[j + 1] = a[10] 下标越界
  6. a[j+1]=t;                           // j = 9 时,a[j + 1] = a[10] 下标越界
复制代码

        下面是我修改的代码,谨供楼主参考
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int i , j , a[10] , t                             ;
  5.         printf("请输入10个数字 : ")                       ;
  6.         for(i = 0 ; i < 10 ; i ++) scanf("%d" , & a[i])   ;
  7.         for(i = 0 ; i < 9 ; i ++){
  8.                 for(j = i + 1 ; j < 10 ; j ++) {
  9.                         if(a[i] > a[j]) {
  10.                                 t = a[j]                  ;
  11.                                 a[j] = a[i]               ;
  12.                                 a[i] = t                  ;
  13.                         }
  14.                 }
  15.         }
  16.         printf("%d" , a[0])                               ;
  17.         for(i = 1 ; i < 10 ; i ++) printf(" , %d" , a[i]) ;
  18.         printf("\n")                                      ;
  19. }
复制代码

        编译、运行实况:
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x
  3. 请输入10个数字 : 2 4 6 8 10 1 3 5 7 9
  4. 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10

  5. D:\0002.Exercise\C>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-15 11:56:27 | 显示全部楼层
奇怪的乱码是指什么呢。
另外冒泡排序是需要双重循环的,外循环为排序的次数,内循环为一次排序比较的次数,
你代码的排序部分需要修改一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-15 12:11:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-3-15 14:07 编辑
  1. for(j=0;j<10;j++)
  2. {
  3. if(a[j]>a[j+1])                     // j = 9 时,a[j + 1] = a[10] 下标越界
  4. t=a[j];
  5. a[j]=a[j+1];                        // j = 9 时,a[j + 1] = a[10] 下标越界
  6. a[j+1]=t;                           // j = 9 时,a[j + 1] = a[10] 下标越界
复制代码

        下面是我修改的代码,谨供楼主参考
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int i , j , a[10] , t                             ;
  5.         printf("请输入10个数字 : ")                       ;
  6.         for(i = 0 ; i < 10 ; i ++) scanf("%d" , & a[i])   ;
  7.         for(i = 0 ; i < 9 ; i ++){
  8.                 for(j = i + 1 ; j < 10 ; j ++) {
  9.                         if(a[i] > a[j]) {
  10.                                 t = a[j]                  ;
  11.                                 a[j] = a[i]               ;
  12.                                 a[i] = t                  ;
  13.                         }
  14.                 }
  15.         }
  16.         printf("%d" , a[0])                               ;
  17.         for(i = 1 ; i < 10 ; i ++) printf(" , %d" , a[i]) ;
  18.         printf("\n")                                      ;
  19. }
复制代码

        编译、运行实况:
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x
  3. 请输入10个数字 : 2 4 6 8 10 1 3 5 7 9
  4. 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10

  5. D:\0002.Exercise\C>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-15 15:49:41 | 显示全部楼层
谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-15 17:36:18 | 显示全部楼层
#include<stdio.h>
int main(void)
{
        int i , j , a[10] , t                             ;
        printf("请输入10个数字 : ")                       ;
        for(i = 0 ; i < 10 ; i ++) scanf("%d" , & a[i])   ;
        for(i = 0 ; i < 10 ; i ++){
                for(j = 0; j < 10-i; j ++)
                                {
                        if(a[j] > a[j+1])
                                                 {
                                t = a[j+1]                  ;
                                a[j+1] = a[j]               ;
                                a[j] = t                  ;
                        }
                }
        }
        printf("%d" , a[0])                               ;
        for(i = 1 ; i < 10 ; i ++) printf(" , %d" , a[i]) ;
        printf("\n")                                      ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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