简易桶排序
这种算法首先需要知道待排序的数的范围。
每个数组元素名代表这个数,如a[1]代表“1”这个数,而数组元素值代表这个数出现的次数。如a[1]=1的意思就是说1这个数字出现过一次。
那么对于随机输入的n个数,我们可以从大到小这样排序:
1 #include <stdio.h> 2 int main(){ 3 int n,a[11]={0},i,j,t; 4 //n是输入的数字个数(小于等于10),定义数组后先初始化,使数字个数归零 5 scanf("%d",&n); 6 for(i=1;i<=n;i++){ 7 scanf("%d",&t);//把每个数读到t中 8 a[t]++; //这个数出现的次数加一 9 } 10 for(i=10;i>=0;i--) //从大到小输出 11 for(j=1;j<=a[i];j++)//每个数出现几次就打印几次,若是0就不进循环 12 printf("%d ",i); 13 return 0; 14 }
注意:定义数组时一定要多一个数,如数字的范围是0到1000,则需要1001个位置。
但是这种方法不能知道每个数对应的东西的排序。
比如说5个学生有5个成绩,这种方法只能把成绩排序而不能带着人名排序。