基数排序分为MSD法与LSD法,以下是LSD法:

基数排序是第二种桶排序的拓展:

LSD是以低优先位先排,高优先位后排的顺序形成正确结果。比如扑克牌的花色优先数字次之,就先排好数字,再排花色,即为所求。

#include<iostream>
#include<vector>
using namespace std;

struct player {
    int id;
    int num;
};

void radixsort(vector<player> &a) {
    vector<player> buc[10];    //这次的桶不光是计数了,所以用向量存放,0~9准备10个向量
    for (int i = 0; i < a.size(); i++) {    //散列入桶,按个位排序
        buc[a[i].num%10].push_back(a[i]);
    }
    a.clear();    //清空准备回收
    for (int i = 0; i < 10;i++) {
        for (auto& e : buc[i])a.push_back(e);    //回收
        buc[i].clear();
    }    
    for (int i = 0; i < a.size(); i++) {    //再次散列入桶,按十位排序
        buc[a[i].num / 10%10].push_back(a[i]);
    }
    a.clear();//清空
    for (int i = 0; i < 10; i++) {
        for (auto& e : buc[i])a.push_back(e);    //回收
        buc[i].clear();
    }
}

int main() {    //测试
    vector<int> a{20, 33, 25, 32, 99, 32, 86, 99, 25, 10, 20, 99, 10, 33, 86, 19, 33, 74, 99, 32};
    vector<player> a2;
    for (int i = 0; i < a.size(); i++) {
        player k;
        k.num = a[i];
        k.id = i+1;
        a2.push_back(k);
    }
    radixsort(a2);
    for (auto& e : a2)printf("%3d%5d\n", e.id, e.num);
}

排序专题——8.基数排序之LSD法相关推荐

  1. php排序算法算法,PHP排序算法之基数排序(Radix Sort)实例详解

    本文实例讲述了PHP排序算法之基数排序(Radix Sort).分享给大家供大家参考,具体如下: 基数排序在<大话数据结构>中并未讲到,但是为了凑齐八大排序算法,我自己通过网络学习了这个排 ...

  2. 插入排序最优_排序专题插入排序

    今天开始,我计划用几篇专题来集中练习下有关排序的算法,排序算法是算法中最基础的算法了,所以这部分我们是要尽可能的全都掌握了.排序算法最常见的有如下几种: 插入排序(Insertion Sort) 选择 ...

  3. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  4. 经典排序算法之基数排序

    经典排序算法之基数排序 1. 基数排序 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数, ...

  5. 经典排序算法之基数排序(C语言版)

    排序算法之基数排序的C语言实现. #include "math.h" #include "stdio.h"/* * 基数排序 2016-04-18 23:43: ...

  6. 数据结构之排序算法:基数排序

    排序算法:基数排序 思维导图: 基数排序的定义: 分配和收集: 基数排序的性能: 基数排序应用: 思维导图: 基数排序的定义: ps: n表示线性表长度 d表示每个元素的位数,例324有三位数字 r表 ...

  7. 算法之排序算法(冒泡法和选择法)

    本篇文章中,都以十个数排序为例子讲解. 冒泡法是依次从后面确定,而选择法则是依次从前面确定.也就是说,冒泡法先确定最后一个数,再确定倒数第二个,再确定--:选择法先确定第一个数,再确定第二个数,再确定 ...

  8. 求全排序的经典算法“后补法”

    //用于求全排序的经典算法"后补法",代码如下: #include <stdio.h> #include <conio.h> #include <st ...

  9. C/C++ 排序专题

    排序专题 3238.字串非重复字符数排序 对 n(1<=n<=100)个由大写字母组成的长度为1~20 的字符串,按字符串中不同字符个数从多到少的顺序进行排序.不同字符个数相同的字符串按字 ...

  10. 排序算法:基数排序与计数排序

    基数排序是基于计数排序的算法,每次都需要使用计数排序从而实现基数排序. 那么什么叫基于计数排序?我们首先要明白基数排序的原理: 每次对数字的一个数位(个位.十位.百位......)进行比较,每次比较后 ...

最新文章

  1. 洛谷P4206 聪聪与可可
  2. 4.7 CNN 特征可视化-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. jQuery Lightbox图片放大预览
  4. wait 和 sleep 的区别
  5. 用栈来求解汉诺塔变形问题
  6. 横向扩展你的ASP.NET Core SignalR 应用
  7. map类的erase方法的在Linux与Windows中的差异
  8. jquery ajax html编码,jQuery AJAX字符编码
  9. [大学回忆录]尧山学习生活总结
  10. 如何理解c和c ++的复杂类型声明
  11. 期待已久的Java 9 今日正式发布,新特性解读
  12. 前端基础知识复习之html
  13. latex 绘制三线表
  14. Java字节码角度分析:Synchronized ——提升硬实力11
  15. uniapp调用手机摄像头_uniapp原生插件开发之调用原生方法(android)
  16. 神通数据库安装及使用手册
  17. 《文法俱乐部》读书笔记之动词时态--LG二进制
  18. 我辛辛苦苦做了一个月的项目,组长年底用来写了晋升PPT
  19. 翻译:seq2seq model in Machine Learning
  20. 微服务框架springcloud(实用篇)【5】Elasticsearch 01

热门文章

  1. 2022.4.21 python中关于sklearn 0.18的错误—— cannot import name comb
  2. das for gyb2.0新增特性说明
  3. Thinkpad预装win10硬盘分区
  4. Ubuntu 16.04 常用软件安装
  5. 2021校招offer薪资如何?(包含当今互联网各巨厂、大厂、中厂)
  6. 计算机网络本地连接,电脑本地连接受限制或无连接怎么办
  7. accept函数的参数不是随便填的
  8. Unity学习笔记——TimeLine的简单使用方法(一)
  9. php主页备案号底部中间,icp备案号怎么放在网站底部
  10. (二)U盘安装Windows Server 2008 R2系统