1.1 桶排序(简陋版)

桶排序(简版)

这是一种对于n个数据排序的方式

这个算法是假设了有n个桶,编号便是0-*(n-1),共n个桶来装数据
每当出现了一个数,我们就在对应编号的桶中放置一个标志
查看数据时只要看每个桶中有多少数据即可

//比如我们对0-10的数进行排序

    int a[11] ;
    int i,j,t ; 

    for(i = 10 ; i >= 0 ; i++){
        a[i] = 0 ; //讲每个桶的原始值设为0
    }

    for(i =1 ; i <=5 ; i++){
        //循环读入数据,我们这里就设读入五个吧
        scanf("%d" , &t);
        a[t]++ ; //相关计数
    }

    for(i = 10 ; i >= 0 ; i++){
        //依次判断a[0]到a[10]
        for(j =1 ; j<=a[i];j++){
            printf("d",i) ; //打印,出现几次打印几次
        }
    }

在这个简化版的桶排序中,有一个缺陷:我们并不知道排序后的数据原本对应哪个数据源
而且,桶排序还非常浪费空间。当我们排序的范围扩大而数据总量不变之后,明显会有很多无用"空桶"(比如我们记录1-1000的数值,但是出现的数字只有1和2)
简言之,桶排序只适合进行简单的排序分类,对于更复杂、更高要求的排序,我们还需要更好的方法

posted @ 2021-11-18 09:00  RetenQ  阅读(27)  评论(0编辑  收藏  举报