简版桶排序

来源:互联网 发布:d盘格式化数据恢复 编辑:程序博客网 时间:2024/05/22 03:49

简单来说,桶排序就好比有N个桶,编号为0-N。开始时所有的桶没都是空的。每出现一个数,在对应编号的桶上放上一个小石子。最后数数每个桶出现多少个小石子就行了。
例如: 3号桶中有1个石子,表示3出现了1次。
5号桶中有2个石子表示5出现了2次。
没有石子的桶则表示该数没有出现。

现在尝试输入n个1~100的整数,将它们从大到小排序。
首先定义桶(注意:对数据范围在1~100的数排序,需要101个桶。)

int Bucket[101]; for(int i=0;i<=100;i++)   Bucket[i]=0;  

接下来输入需要排序的数字。

for(int i=1;i<=n;i++){   scanf("%d",&temp);   Bucket[temp]++;}

最后,只需要将出现过的数打印出来就可以了,出现几次打印几次。

for(int i=0;i<=100;i++){   if(Bucket[i])   for(int j=Bucket[i];j>0;j--)   {     printf("%d ",i);   }}

完整的代码如下。

#include<stdio.h>int main(){  int Bucket[101],temp,n;  for(int i=0;i<=100;i++)     Bucket[i]=0;   scanf("%d",&n);  for(int i=1;i<=n;i++)  {    scanf("%d",&temp);    Bucket[temp]++;   }  for(int i=1;i<=100;i++)  {     if(Bucket[i])     {        for(int j=Bucket[i];j>0;j--)        printf("%d ",i);     }  }   return 0;}

如果要实现从小到大排序,只需要将for(int i=1;i<=100;i++)改为for(int i=100;i>=1;i--)

原创粉丝点击