“桶排序”(简化版)
程序员文章站
2022-05-13 21:24:30
...
排序问题:
简单说就是现在给定10个空的桶,编号0~9。每个桶都有自己的编号,如果输入的数据属于某个桶的编号,那么就在那个桶里放一个球。
举个例子:
现在给定n个数,要将它们从小到大输出,那么用上述排序的方法,很快就能搞定。代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int book[10],n,t,i,j;
memset(book,0,sizeof(book)); //调用memset函数需要有头文件<string.h>;
scanf("%d",&n); //输入一个数,接下来有n个数;
for(i=0;i<n;i++)
{
scanf("%d",&t); //将输入的每个数读到变量t中
book[t]++; //编号为t的桶放一个球;
}
for(i=0;i<10;i++) //判断每个桶的情况;
{
for(j=1;j<=book[i];j++)
{
printf("%d ",i); //有几个球就输出几次;
}
}
return 0;
}
测试结果如下:
5
2 8 5 3 3
2 3 3 5 8
但是这种算法有局限性,举个例子,如果是对几个人的成绩排序,按成绩输出他们的名字,这种就无法完成。也就是说找不到拥有这个数的家伙是谁。