桶排序

天空之城 - 久石让

桶排序:

PS1:将5分、2分、5分、3分和8分,按从小到大的顺序进行排序。

  • 自己的程序实例:
#include
int main()
{
   int a[100], i, j, t, n;
   scanf("%d",&n);                            //输入n个数
   for(i = 1;i <= n; i++)                        //循环读入n个数
       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;
}
/*输入题目中的数后
5
5 3 5 2 8
输出结果为23558*/

书中算法实例:
申请一个大小为11的数组 int a[11]。运用数组下标0 ~ 10表示0 ~ 10分(最高分为10分),每次读入一个数,就在数组a的对应处位置加1,以此往复。
a[0]~a[10]中根据每个分数出现的次数进行打印,没有出现则不打印输出。
桶排序算法(完整代码):

#include
int main()
{
    int a[11], i, j, t;
    for(i = 0; i <= 10; i++)      //此处控制桶排序的打印输出数的排列方向
        a[i] = 0;
    for(i = 1; i <= 5; i++)
    {
        scanf("%d",&t);
        a[t]++;
    }
    for(i = 0; i <= 10; i++)      //依次判断a[0]~a[10]
        for(j = 1; j <= a[i]; j++)//出现几次就打印几次
            printf("%d",i);
    getchar();getchar();
    //这里的getchar();日志的意思,在实例程序一定要写上,平时可以不写
    //也可以用别的代替,例如system(“pause”);等来代替
    return 0;
}
/*输入题目中的数后
5 3 5 2 8
输出结果为23558
*/

  • 此上为简化版的桶排序算法,其本质不能真正算是排序算法,没有办法将人和数值对应,例如成绩栏,只能将成绩排序无法对应该学生,意思是不能将中文和数值结合进行打印。还有一个桶排序占用空间太大,假如所排序的数值范围在一千到一亿就没办法,因为这样就要建立非常巨大的空间来进行对这些数值统计,非常浪费空间。

你可能感兴趣的:(桶排序)