Life is fantastic

Life

桶排序

45
2021-12-27
桶排序

​ 在我们生活的这个世界中到处都是被排序过的东东。战队的时候回按照身高排序,考试的名次需要按照分数排序...

​ 假如期末考试完了老师要将同学们的分数安装好气哦从高到低排序,班上只有==5==个同学,分别考了5分、3分、5分、2分和8分,接下来需要将分数进行从大到小排序(==满分为10分==),排序后是8 5 5 3 2.你有没有什么好方法编写一段程序,让计算机随机读入5个数然后将这5个数从大到小输出?

​ 我们这里只需要借助一个一维数组就可以解决这个问题

  1. 首先申请一个大小为int a[11]的数组

    由于满分为10分所以取11即可获得0-10为下标的数组

  2. 编号a[0]~a[10],初始化为0,表示0-10分数还没有人得过

    例如a[1]=0表示1分目前还没有人得过

  3. 开始排序,有一个人的分数为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]
  1. 最终结果输出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