• 桶排序


     1 //桶排序思想
     2 //假如要排序的是数字是 2 4 5 5 5 8 8 9 1 1
     3 #include<stdio.h>
     4 #define length 10
     5 int main()
     6 {
     7     //数组元素值全部初始化为0
     8     int array[length]={0};
     9     int i,j;
    10     int n;
    11     for(i=0;i<length;i++)
    12     {
    13         scanf("%d",&n);
    14         array[n]++;
    15     }
    16     for (i = 0; i < length; i++)
    17     {
    18         for(j=0;j<array[i];j++)
    19             printf("%d ",i);
    20     }
    21 
    22     return 0;
    23 }

    假如上面是运动会某个时刻的金牌数,这样子无法区分到底是哪个国家。

    并且排序满足:1.按照金牌数 2.按照输入顺序

    我们可以设置一个二维数组,把每行数组看做一个队列,先输入的先进队,输出自然是遵循先进先出的原则。

    // Ba 2 Da 4 Ea 5 Eb 5 Ec 5 Ha 8 Hb 8 Ia 9 Aa 1 Ab 1
    #include<stdio.h>
    #define length 10
    
    struct node
    {
        char country[6];   //国家
        int count;             //金牌数
    };
    int main()
    {
        int i,j,n;
        int array[10][10]={0};
        int index[10]={0};       //存储每行队列(数组)内元素个数
        struct node ary[length]={
            {"Ba",2},{"Da",4},{"Ea",5},{"Eb",5},
            {"Ec",5},{"Ha",8},{"Hb",8},{"Ia",9},
            {"Aa",1},{"Ab",1}};
        for(i=0;i<length;i++)
        {
            n=ary[i].count;            //桶子编号
            array[n][index[n]]=i;    //存储结构体数组索引
            index[n]++;
        }
        for(i=0;i<length;i++)
        {
            for(j=0;j<index[i];j++)
            {
                printf("%s %d
    ",ary[array[i][j]].country,ary[array[i][j]].count);
            }
        }
    }

    结果:

    如果感觉代码不好理解,看图:

  • 相关阅读:
    MySQL存储过程
    [转载]JDBC应该始终以PreparedStatement代替Statement
    Restlet入门例子 RESTful web framwork for java
    Cglib的使用方法(3)Mixin
    HDOJ_1220
    精华:OracleHelper类
    web.config详解
    ADO.NET结构
    字典树
    WCF、Net remoting、Web service概念及区别
  • 原文地址:https://www.cnblogs.com/qiangua/p/3703058.html
Copyright © 2020-2023  润新知