简版桶排序
来源:互联网 发布: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--)
阅读全文
0 0