桶排序指一种最基础的排序,虽然并不能算是最方便的排序但是要比一般的传统排序要快一点。
桶排序中将一组数组视为一个一个的水桶,水桶表示输入的数据值是几,即数组的下标。而水桶里面放的数据则表示该数字出现了几次,即数组中存放的数据表示了改数组下标所表示的数字出现的次数。
如下图所示含义:
具体代码如下
#include<stdio.h>
int main()
{
int book[1001],t,n;
for(int i=0;i<=1000;i++)
book[i]=0;
scanf("%d",&n);//输入一个数表示,有n个数需要排列
for(int i=1;i<=n;i++)//进入循环,表示有n个数
{
scanf("%d",&t);//输入数字t,表示该数字出现了
book[t]++;//表示该数字出现的次数加一
}
for(int i=1000;i>=0;i--)//依次判断编号为0~1000的桶
{
for(int j=1;j<=book[i];j++) //出现了几次就将桶的编号打印几次
printf("%d ",i);
}
return 0;
}
该代码的表示的是在0~1000中选取数字n表示所需要排列数字的个数,然后再0~1000中任选n个数,进行从大到小的排序。上述代码的缺点是浪费空间大。