排序专题——8.基数排序之LSD法
基数排序分为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法相关推荐
- php排序算法算法,PHP排序算法之基数排序(Radix Sort)实例详解
本文实例讲述了PHP排序算法之基数排序(Radix Sort).分享给大家供大家参考,具体如下: 基数排序在<大话数据结构>中并未讲到,但是为了凑齐八大排序算法,我自己通过网络学习了这个排 ...
- 插入排序最优_排序专题插入排序
今天开始,我计划用几篇专题来集中练习下有关排序的算法,排序算法是算法中最基础的算法了,所以这部分我们是要尽可能的全都掌握了.排序算法最常见的有如下几种: 插入排序(Insertion Sort) 选择 ...
- DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总
DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...
- 经典排序算法之基数排序
经典排序算法之基数排序 1. 基数排序 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数, ...
- 经典排序算法之基数排序(C语言版)
排序算法之基数排序的C语言实现. #include "math.h" #include "stdio.h"/* * 基数排序 2016-04-18 23:43: ...
- 数据结构之排序算法:基数排序
排序算法:基数排序 思维导图: 基数排序的定义: 分配和收集: 基数排序的性能: 基数排序应用: 思维导图: 基数排序的定义: ps: n表示线性表长度 d表示每个元素的位数,例324有三位数字 r表 ...
- 算法之排序算法(冒泡法和选择法)
本篇文章中,都以十个数排序为例子讲解. 冒泡法是依次从后面确定,而选择法则是依次从前面确定.也就是说,冒泡法先确定最后一个数,再确定倒数第二个,再确定--:选择法先确定第一个数,再确定第二个数,再确定 ...
- 求全排序的经典算法“后补法”
//用于求全排序的经典算法"后补法",代码如下: #include <stdio.h> #include <conio.h> #include <st ...
- C/C++ 排序专题
排序专题 3238.字串非重复字符数排序 对 n(1<=n<=100)个由大写字母组成的长度为1~20 的字符串,按字符串中不同字符个数从多到少的顺序进行排序.不同字符个数相同的字符串按字 ...
- 排序算法:基数排序与计数排序
基数排序是基于计数排序的算法,每次都需要使用计数排序从而实现基数排序. 那么什么叫基于计数排序?我们首先要明白基数排序的原理: 每次对数字的一个数位(个位.十位.百位......)进行比较,每次比较后 ...
最新文章
- 洛谷P4206 聪聪与可可
- 4.7 CNN 特征可视化-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- jQuery Lightbox图片放大预览
- wait 和 sleep 的区别
- 用栈来求解汉诺塔变形问题
- 横向扩展你的ASP.NET Core SignalR 应用
- map类的erase方法的在Linux与Windows中的差异
- jquery ajax html编码,jQuery AJAX字符编码
- [大学回忆录]尧山学习生活总结
- 如何理解c和c ++的复杂类型声明
- 期待已久的Java 9 今日正式发布,新特性解读
- 前端基础知识复习之html
- latex 绘制三线表
- Java字节码角度分析:Synchronized ——提升硬实力11
- uniapp调用手机摄像头_uniapp原生插件开发之调用原生方法(android)
- 神通数据库安装及使用手册
- 《文法俱乐部》读书笔记之动词时态--LG二进制
- 我辛辛苦苦做了一个月的项目,组长年底用来写了晋升PPT
- 翻译:seq2seq model in Machine Learning
- 微服务框架springcloud(实用篇)【5】Elasticsearch 01
热门文章
- 2022.4.21 python中关于sklearn 0.18的错误—— cannot import name comb
- das for gyb2.0新增特性说明
- Thinkpad预装win10硬盘分区
- Ubuntu 16.04 常用软件安装
- 2021校招offer薪资如何?(包含当今互联网各巨厂、大厂、中厂)
- 计算机网络本地连接,电脑本地连接受限制或无连接怎么办
- accept函数的参数不是随便填的
- Unity学习笔记——TimeLine的简单使用方法(一)
- php主页备案号底部中间,icp备案号怎么放在网站底部
- (二)U盘安装Windows Server 2008 R2系统