haoaben
haoaben
采纳率100%
2015-11-17 01:24 阅读 1.6k
已采纳

C语言冒泡排序法的疑惑

任意输入n个数,冒泡排序。我写的代码是这样的:

int main()
{
    int i,j,t,n;
    int a[n];
    n=5;
    printf("Please Enter %d numbers: \n",n);
    for(i=0;i<n;i++) {
        scanf("%d",&a[i]);
    }
    printf("The original order is: \n");
    for(i=0;i<n;i++) {
        printf("%5d",a[i]);
    }
    printf("\n");
    for(i=0;i<n-1;i++) {
        for(j=0;j<n-1-i;j++) {
            if(a[j]>a[j+1]) {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    printf("The sorted order is: \n");
    for(i=0;i<n;i++) {
        printf("%5d",a[i]);
    }
    printf("\n");
    return 0;
}

编译时没有问题,执行时就会说“程序已停止工作”之类的,我后来又把数组声明的"int a[n]"改成"int a[n+1]",就正常了,为什么啊?我里面明明只放了n个数,为什么要声明一个n+1个元素的数组?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    wangyu_test 木听涛 2015-11-17 01:52

    通过实际测试你的程序有两个问题,一个n=5;应该在数组定义前面;一个冒泡排序两个for语句的第一个,应该是for(i=0;i<n;i++)

    点赞 评论 复制链接分享
  • CSDNXIAOS Robot-S 2015-11-17 01:31

    //冒泡的思想(按升序),两个相邻的数进行比较,第一个和第二个比较, 如果第一个比第二个大,就交换顺序,否则不交换。接下来再比较第二个和第三个,仍
    //然是如果前者比后者大,就交换顺序。这样依次比较,这样当倒数第二个数和最后一个数比较过后,最后一个数就是这些数里最大的,上述过程称作第一趟冒泡排序。
    //按这样的比较规则再比较最后一个数前面的所有数,就能找出倒数第二大的数来。判别排序结束的条件是......
    答案就在这里:C语言 冒泡排序法
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    点赞 评论 复制链接分享
  • ll201lw ll201lw 2015-11-17 01:50

    冒泡算法?好久没玩了

    点赞 评论 复制链接分享
  • qq_27183003 ysuwood 2015-11-17 02:38

    任意输入n个数,需要动态分配数组:

     #include "stdio.h"
    int main()
    {
        int i,j,t,n;
        //int a[n];
        //n=5;
        int *a;
        printf("请输入数组长度:");
        scanf("%d",&n);
        a=new int[n]; //增加
        printf("Please Enter %d numbers: \n",n);
        for(i=0;i<n;i++) {
            scanf("%d",&a[i]);
        }
        printf("The original order is: \n");
        for(i=0;i<n;i++) {
            printf("%5d",a[i]);
        }
        printf("\n");
        for(i=0;i<n-1;i++) {
            for(j=i;j<n-1;j++) {//修改
                if(a[j]>a[j+1]) {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
            }
        }
        printf("The sorted order is: \n");
        for(i=0;i<n;i++) {
            printf("%5d",a[i]);
        }
        printf("\n");
        delete []a;//增加
        return 0;
    }
    
    
    点赞 评论 复制链接分享

相关推荐