C语言 冒泡排序

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

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

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

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

    

 #include 
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]);
    }
}                最后的输出也是正确的,不过在找错误的过程中是有一些难度的。其中的收获也应该是最大的。要充分理解循环其中的意义,和用法是十分有必要的。

你可能感兴趣的:(C,C#学习)