C语言:桶排序
比如十分制的成绩排名
首先需要对数组进行初始化,全部赋为0(表示0到10分值暂时没有出现过)
然后用for循环来输入值(分数)
将输入的分数的赋给数组下标
那么所对应的值加一(表示该分数出现一次)
{ 例如; scanf输入的值为:9
那么a[9] = 0 —> a[9] = 1;
数组的下标[0~10]就代表了分数
}
以五个数举例
如
3,5,5,8,2
输入后:
输出:
通过两层循环输出:
第一层循环控制下标,第二层循环控制输出个数(分数出现的次数)
(由低到高还是由高到低按自己意愿)
时间复杂度O(M+N)
(十个数)代码如下:
#include<stdio.h>
int main(int argc,char*argv[])
{
int a[11]={0};
int i,j,t;
int n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&t);
a[t]++;
}
for(i=10;i>-1;i--)
{
for(j=0;j<a[i];j++)
{
printf("%d ",i);
}
}
return 0;
}