C语言 冒泡排序

        算法中排序是十分重要的,而每一个学习计算机的都会在初期的时候接触到这种排序。因为在初期时我在程序设计基础时学到过有关的排序,并用伪代码写过。因而感觉在C语言中也会很简单,不过呢,事实并不是这样。看过循环后去尝试编写了一个关于十个整数的排序问题。在这个过程中真的是错误百出。结论就是永远不要眼高手低,要脚踏实地的敲代码,改bug,发现错误,并不断改正。

        以下所缩写的代码。,然而这个代码有很大的问题。首先是运行时间的问题,时间大约是60秒。当时十分不解,仅仅几行代码就要一分钟。而且排列的数并不全对,部分排列正确,但是会出现没有输出的数。

就像这样,输入只有一个0,但输出有两个0.

      分析问题。检查代码后发现14行中的循环条件控制出错。应该是i>=0时进行。这样本 应该是死循环,也就是为什么会运行一分钟的原因所在了。15行的j处的循环条件也是有问题的,因为我用的是[j+1],所以要控制到j<=8.而且要注意的是C语言中数组的开始为[0],不是1。这里的错误是解释了为什么会出现没有输入但有输出的数了。下面是改过后的代码。

    

 #include <stdio.h>
int main()
{    int i,a[10],t,j;
    printf("entre data:\n");
    for(i=0;i<10;i++){
        scanf("%d",&a[i]);
    }
    printf("\n");
    printf("the orginal numbers:\n");
    for(i=0;i<10;i++){
    printf("%d,",a[i]);
    }
    printf("\n");
    for(i=9;i>=0;--i){
        for(j=0;j<=8;++j){
        if(a[j]>a[j+1]){
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
               }
            }
    }
    printf("the numbers:\n");
    for(i=0;i<10;i++){
        printf("%d,",a[i]);
    }
}                最后的输出也是正确的,不过在找错误的过程中是有一些难度的。其中的收获也应该是最大的。要充分理解循环其中的意义,和用法是十分有必要的。
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值