美文网首页
桶排序,冒泡排序

桶排序,冒泡排序

作者: SheBang_ | 来源:发表于2016-01-09 14:44 被阅读92次

    桶排序

    我们创建一个一个数组,数组内存放的内容是我们对该数组对应的数字的计数,然后我们按照计算对数组的对应的值进行输出,这样我们就能输入的值,进行排序。因为我们的桶是排好序列的。

    #include <stdio.h>
    int main(){
        int a[11],i,t,j;
        for (i=0;i<=10;i++){//创建一个数组,给这个数组初始化,每个位置都赋值为0
            a[i]=0;
        }
        for (i=1;i<=5;i++){//从键盘录入5个数,对应数字的筒,里面存的数字递增一个数字
            scanf("%d",&t);
            a[t]++;
        }
        for (i=0;i<=11;i++)//开始扫描这个数组,桶内递增几个数字,将这个数字,按次数输出
            for (j=1; j<=a[i]; j++)
                printf("%d",i);
        getchar();
        getchar();
        return 0;
    }
    

    桶排序的缺点:

    1. 我们假如要排列的数字较大的时候,我们就需要这个数字对应的桶
    2. 我们不可以对小数进行排序
    3. 只能输出对数字的排序,不能输出对数组以外的信息进行输出

    冒泡排序

    冒泡排序就是对一组数组,进行前后值的比较,比如我们需要对数组进行从小到大的排序的时候,我们只需要从头开始,将前后值进行比较,相比较之后,大的值排在后面,依次进行就可以达到目的。我们有n个数字的时候,就会进行n-1趟,每次都是n-i次交换,i是第几趟,因为我们排序过一趟的话,就不需要动最后一个值,排序过两趟的话就不需要对最后面的两个值进行排序。

    #include <stdio.h>
    int main(){
        int a[100],n,i,j,t;
        scanf("%d",&n);
        for (i=1; 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=1; i<=n; i++) {
            printf("%d",a[i]);
        }
        getchar();
        getchar();
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:桶排序,冒泡排序

          本文链接:https://www.haomeiwen.com/subject/rncqkttx.html