桶排序的思想是,若待排序的记录的关键字在一个明显有限范围内时,可设计有限个有序桶,每个桶只能装与之对应的值,顺序输出各桶的值,将得到有序的序列。简单来说,在我们可以确定需要排列的数组的范围时,可以生成该数值范围内有限个桶去对应数组中的数,然后我们将扫描的数值放入匹配的桶里的行为,可以看作是分类,在分类完成后,我们需要依次按照桶的顺序输出桶内存放的数值,这样就完成了桶排序。
代码+思路
#include<stdio.h> int main() { int a[10]={0}; //以10个桶为例,必须将10个桶初始值设为0 int n; //要输入的数字个数 scanf("%d",&n); int i,j; for(i=0;i<n;i++) { int key; scanf("%d",&key); a[key]++; //输入key,key会放在a[key]中,同时a[key]++记录了该桶存放的数据+1 } for(i=0;i<10;i++) //这里表示将这10个桶里面的数全部输出,如果写n,则输出到n桶就停止了,如果有比n要大的数字即存放在了n桶后面就无法输出 for(j=0;j<a[i];j++) //小于a[i] ,一个桶里面可能有好几个一样的数字 printf("%d ",i); return 0; }