桶排序
5 3 5 2 8
这个算法就好比预先有几个桶【暂定为11个】,编号从0~10。每出现一个数,就在对应编号的桶中放一个小旗子,最后只要数数每个桶中有几个小旗子就OK 了。例如2 号桶中有1 个小旗子,表示2 出现了一次;3 号桶中有1 个小旗子,表示3 出现了一次;5 号桶中有2 个小旗子,表示5出现了两次;8 号桶中有1 个小旗子,表示8 出现了一次。
#include <stdio.h>
int main()
{
int book[1001],i,j,t,n;
for(i=0;i<=1000;i++)
book[i]=0;
scanf("%d",&n);//输入一个数n,表示接下来有n个数
for(i=1;i<=n;i++)//循环读入n个数,并进行桶排序
{
scanf("%d",&t); //把每一个数读到变量t中
book[t]++; //进行计数,对编号为t的桶放一个小旗子
}
for(i=1000;i>=0;i--) //依次判断编号1000~0的桶
for(j=1;j<=book[i];j++) //出现了几次就将桶的编号打印几次
printf("%d ",i);
getchar