世界上最快最简单的排序——桶排序

今天又是无趣的寒假之中的一天,但是,我准备好好开始学习算法了,我是想每天至少学习一种算法,也不知道能不能坚持下来,反正先试试,万一呢?!

 

世界上有好多东西都是需要排序的

栗子one:给你一串在十以内的数字进行降序排列

最好就是在输入时就进行归类,可以设一个a[11]的数组,放进去,最后再通过循环输出

#include <stdio.h>
    int main()
    {
        int a[11],i,j,t;
        for(i=0;i<=10;i++)
            a[i]=0;  //初始化为0

        for(i=1;i<=5;i++)  //循环读入5个数
        {
            scanf("%d",&t);  //把每一个数读到变量t中
            a[t]++;  //进行计数
        }
        for(i=10;i>=0;i--)  //依次判断a[0]~a[10]
            for(j=1;j<=a[i];j++)  //出现了几次就打印几次
                printf("%d ",i);
        getchar();getchar();
        //这里的getchar();用来暂停程序,以便查看程序输出的内容
        //也可以用system("pause");等来代替
        return 0;
    }

*--i和i--在循环中是一样的效果,但是--i会稍微快一点

*时间复杂度事O(m+n),因为

for(i=0;i<=10;i++)进行了m次,
for(i=1;i<=5;i++)进行了n次,最后的双重循环进行了n+m次,所以是2(n+m)次,但是常数一般忽略怎么说这个桶排序只是最最最简单的一种,之后如果我学习到新的方法还会继续改进。PS:插点题外话,最近新型冠状病毒肆虐,全国的人们都进入了戒备状态。我也一样,刚开始真的是紧张的不得了,但是现在已经好多天了,心情也逐渐平复。真的真的看到了好多医生主动在春节期间去武汉进行支援,很感动,也很庆幸我们可以生活在这样一个如此强大的国家之中。相信在大家的共同努力下,我们会挺过来的,未来会更好!!!

相关推荐