zoukankan      html  css  js  c++  java
  • 低位优先排序

    struct node{
        string tmp;
        int num;
    };
    int main(int argc, char *argv[])
    {
        node nn[6] = {
            { "A", 2 },
            { "B", 3 },
            { "C", 3 },
            { "D", 1 },
            { "E", 2 },
            { "F", 3 },
        };
        int cnt[4] = { 0 };
        for (int i = 0; i < 6; i++)
        {
            cnt[nn[i].num]++;
        }
        for (int i = 0; i < 4; i++)
        {
            cnt[i + 1] += cnt[i];
        }
        node res[6];
        for (int i = 0; i < 6; i++)
        {
            res[cnt[nn[i].num-1]++] = nn[i];
        }
        for (int i = 0; i < 6; i++)
        {
            cout << res[i].tmp << " " << res[i].num << endl;
        }
    
        return 0;
    }

    低位优先排序,根据键的索引来分组排序。

    步骤是:

    1.频率统计

    2.频率转换为索引

    3.数据排序

    对于上面的例子(我没有完全按照《算法》一书来写,不过思路是一样的)。可以发现:

    比如

            { "A", 2 },
            { "B", 3 },
            { "C", 3 },
            { "D", 1 },
            { "E", 2 },
            { "F", 3 },

    频率分布为1个1组,2个2组,3个3组。

    所以计算后的索引应该是:

    0,1,3.

    0位置放一组,1位置放置两个二组,3位置放三个三组。

    每放一个元素,索引表就加1.这样就可以把数组排序。

  • 相关阅读:
    python获取当前路径
    python的StringIO
    python判断两个文件是否相同
    Linux查找文件内容
    python日志syslog运用
    python获取当前运行程序的名字
    python连接Linux命令行
    python预编译函数compile,exec,eval
    python日志模块
    Scala安装教程
  • 原文地址:https://www.cnblogs.com/wyc199288/p/6361385.html
Copyright © 2011-2022 走看看