首页 > 编程语言 > 详细

低位优先排序

时间:2017-02-02 18:20:04      阅读:263      评论:0      收藏:0      [点我收藏+]
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.这样就可以把数组排序。

低位优先排序

原文:http://www.cnblogs.com/wyc199288/p/6361385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!