桶排序
45
2021-12-27

在我们生活的这个世界中到处都是被排序过的东东。战队的时候回按照身高排序,考试的名次需要按照分数排序...
假如期末考试完了老师要将同学们的分数安装好气哦从高到低排序,班上只有==5==个同学,分别考了5分、3分、5分、2分和8分,接下来需要将分数进行从大到小排序(==满分为10分==),排序后是8 5 5 3 2.你有没有什么好方法编写一段程序,让计算机随机读入5个数然后将这5个数从大到小输出?
我们这里只需要借助一个一维数组就可以解决这个问题
-
首先申请一个大小为
int a[11]
的数组由于满分为10分所以取11即可获得0-10为下标的数组
-
编号
a[0]
~a[10]
,初始化为0,表示0-10分数还没有人得过例如
a[1]=0
表示1分目前还没有人得过 -
开始排序,有一个人的分数为5分就把对应的
a[5]
的值加一,表示已经有一个人获得了5分,接着有一个人得了3分所以把a[3]
的值也加一,以此类推我们可以得到如下的结果
0 | 0 | 1 | 1 | 0 | 2 | 0 | 0 | 1 | 0 | 0 |
---|---|---|---|---|---|---|---|---|---|---|
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] | a[10] |
- 最终结果输出2 3 5 5 8,完整代码如下
#include<stdio.h>
int main(){
int a[11],i,j,t;
for(i=0;i<=10;i++){
//初始化为0
a[i]=0;
}
//循环读入5个数(5个同学)
for(i=1;i<=5;i++){
//把每一个数读到变量t中
scanf("%d",&t);
//计数
a[t]++;
}
//依次判断a[0]-a[10]
for(i=0;i<=10;i++){
//出现了几次就打印几次 a[1]=2则次数循环两次1
for(j=1;j<=a[i];j++){
printf("%d",i);
}
}
system("pause");
return 0;
}
- 0
-
分享