基数排序

【基数排序】十大排序算法之基数排序 【基数排序】十大排序算法之基数排序,是属于【稳定】的排序。 阅读详情

算法描述

     前面所讨论的简单排序、快速排序和堆排序等等排序算法都假定待排序的记录只有一个关键字。基数排序可以处理多关键字排序问题。可以将一副纸牌的排序问题看成一个基于两个关键的排序问题,这两个关键字分别为纸牌的花色和面值。基数排序可以有两种处理关键字的顺序MSD(Most Significant Digit)排序和LSD(Least Significant Digit)排序。

Q:基数排序(以整形为例),将整形10进制按每位拆分,然后从低位到高位依次比较各个位。主要分为两个过程:

(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)
(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中
重复(1)(2)过程,从个位到最高位(比如32位无符号整形最大数4294967296,最高位10位)
以【521 310 72 373 15 546 385 856 187 147】序列为例,具体细节如下图所示:



算法实现(LSD):
输入数据以单链表形式给出
#define MAX_DIGIT 3
#define RADIX_SIZE 10
typedef struct listNode *plist;
typedef struct listNode
{
	int key;
	plist link;
};
int getDigit(int num,int pos)
{
	int temp = 1;
	for(int i=0;i<pos-1;i++)
		temp *= RADIX_SIZE;
	return (int)(num/temp)%RADIX_SIZE;
		
}
plist radixSort(plist ptr)
{
	plist front[RADIX_SIZE],rear[RADIX_SIZE];
	int i,j,digit;
	for (i=1;i<=MAX_DIGIT;i++)
	{
		/* init front[] and rear[]. */
		for(j=0;j<RADIX_SIZE;j++)
			front[j]=rear[j]=NULL;
		/* allocate ptr to front[]...rear[]. */
		while(ptr)
		{
			digit = getDigit(ptr->key,i);
			if(!front[digit])
				front[digit] = ptr;
			else
				rear[digit]->link = ptr;
			rear[digit] = ptr;
			ptr = ptr->link;
		}
		/* reestablish the linked list for the next pass */
		ptr = NULL;
		for(j=RADIX_SIZE-1;j>=0;j--)
			if(front[j]){
				rear[j]->link = ptr; ptr = front[j];
			}
	}
	return ptr;
}

测试数据以及每轮测试的中间结果:


参考文章:http://blog.youkuaiyun.com/cjf_iceking/article/details/7943609

Proteus 8.17安装部署全指南:避坑、汉化与STM32库配置 Proteus是一款广泛用于单片机仿真与电路设计的EDA工具,其核心价值在于支持嵌入式系统原型验证与教学实践。Proteus 8.17版本重构了许可证机制(LIC Engine)、依赖环境(VC++ 2019/NET 4.8)及路径加载逻辑,导致传统安装方法失效。掌握正确安装部署流程,是保障原理图绘制、VSM仿真(如51/STM32/ESP32)及外设波形观测(OLED、SPI、ADC)稳定运行的前提。本文聚焦Windows平台下零失败安装路径选择、权限配置、汉化实施与高频器件(如STM32F103)元件库 阅读详情

相关推荐

Win10更新后黑屏只剩鼠标?火绒误杀explorer.exe的5种自救方案(附详细步骤)

本文详细介绍了Win10更新后出现黑屏只剩鼠标的5种专业修复方案,重点解决火绒误杀explorer.exe的问题。从基础的任务管理器操作到安全模式下的系统修复,再到注册表编辑和系统还原,提供了全面的解决方案,帮助用户快速恢复系统正常运行。

weixin_29306571的博客 636

基数排序与桶排序,计数排序【详解】

桶排序简单入门篇^-^ 在我们生活的这个世界中到处都是被排序过的东东。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东东都需要排序,可以说排序是无处不在。现在我们举个具体的例子来介绍一下排序算法。 首先出场的是我们的主人公小哼,上面这个可爱的娃就是啦。期末考试完了老师要将同学...

weixin_33862993的博客 177

最新Docker GPU支持全解析:为什么nvidia-smi能用但PyTorch找不到CUDA?

本文深入解析了Docker容器中nvidia-smi命令可用但PyTorch无法调用CUDA的根本原因。关键在于默认配置仅暴露了GPU的utility管理能力,而CUDA计算所需的compute能力未被激活。通过正确设置NVIDIA_DRIVER_CAPABILITIES环境变量为compute,utility,并配合--gpus参数,即可解决此问题,确保AI训练等任务顺利进行。

convnet3designer的博客 237

什么是基数排序?

文章目录什么是基数排序稳定的计数排序基数排序的实现 什么是基数排序 稳定的计数排序 数据结构与算法 | 计数排序 计数排序的基本思路在这里就不多进行介绍了,如果不了解的可以看看我以前写的博客。 void countSort(vector<int>& arr) { int max = arr[0], min = arr[0]; //找出最大值和最小值,缩减范围 for(int i = 1; i < arr.size(); i++) {

凌桓丶的博客 1万+

Spring Boot入门(02):【教程】轻松搭建Spring Boot开发环境,启动你的第一个Web项目!

快速搭建开发环境和启动项目是每个开发人员必备的技能。本文将为您提供一些简单易懂的方法和技巧,以帮助您快速搭建开发环境和启动项目。我们将介绍如何选择适合您的开发工具、配置您的操作系统、安装必要的软件包和依赖项,并开始编写您的第一个应用程序。无论您是一位新手还是一位经验丰富的开发人员,本文都会给您提供有用的信息和实用的建议,让您在最短时间内快速搭建和启动开发项目。

**My Coding Family** 22万+

YOLO26涨点改进 | 全网独家首发 主干改进篇 | TGRS 2025 | RepViT-TD,告别庞大骨干!YOLO26 + RepViT-TD轻量又强大,实现更快更准的小目标检测!

本文提出将RepViT-TD轻量级主干网络应用于YOLO26目标检测框架,以提升小目标检测性能。RepViT-TD通过优化计算资源分配,强化前两层高分辨率特征提取能力,在保持轻量化的同时(仅4.85M参数)显著提升微小目标的检测精度(AI-TODv2数据集AP50达54.6%)。文章详细介绍了三种主干改进方案(RepVit_ldy1/2/3)的代码实现,并提供了完整的YAML配置文件修改指南,使模型能高效部署于边缘设备。实验表明,该方法在计算复杂度(38.19G FLOPs)和检测精度间取得了良好平衡。

Ai缝合怪、助力小伙伴高效发论文 328

基数排序与链式基数排序

折腾数据结构实验的时候遇到这一个算法。之前对此不甚了解,总算也找到一篇不错的文章。转载如下   基数排序 (Radix Sort) 基数排序是采用“分配”与“收集”的办法,用对多关键码进行排序的思想实现对单关键码进行排序的方法。 多关键码排序: 1.以扑克牌排序为例。每张扑克牌有两个“关键码”:花色和面值。其有序关系为: 花色: 面值:2 2.如果我们把所有扑克牌排成以下

atskyline 1万+

使用Matlab与V-REP联合仿真

在Matlab中,我们可以使用V-REP提供的远程API(Application Programming Interface)来连接到V-REP仿真环境。为了连接Matlab与V-REP,我们需要在Matlab中添加V-REP的远程API函数库。你可以根据具体的需求编写Matlab脚本来控制V-REP场景中的机器人,并进行系统建模和仿真。一旦成功连接到V-REP,我们可以使用Matlab来控制V-REP场景中的机器人。在本文中,我们将介绍如何使用Matlab与V-REP进行联合仿真,并提供相应的源代码。

HackMasterX的博客 1853

基数排序--链式基数排序(Radix)

链式基数排序:属于”分配式排序”(distribution sort)基数排序法又称“桶子法”(bucket sort)或bin sort。 链式基数排序思想:透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数。 时间效率:设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排序的时间复杂度为O(d(n+radix)),其中,一趟分配时间复杂度为O

保福寺计算机 的专栏 2579

【Unity实战篇 】| Unity实现 文本框可以自适应大小,到达最大宽度之后再缩小字体

Unity实现 Text文本框可以自适应大小,到达最大宽度之后再缩小字体 需求:在文本框可以自适应大小拉伸的前提下,增加一个最大限制宽度,使其到达最大宽度后 再启用 Best Fit 实现自适应改变文字大小以适应文本框的大小。 在Unity中经常会用到文本组件的自适应大小功能,一般使用HorizontalLayoutGroup和ContentSizeFitter组件配合即可实现文本自适应的效果。

努力前行,总会成为自己心中的那道光 3万+

YOLOv8【第十二章:数据增强与数据工程篇·第10节】主动学习(Active Learning):如何挑选最有价值的样本进行标注!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 508

基数排序——详解

基数排序(英语:Radix sort)是一种非比较型的排序算法,最早用于解决卡片排序的问题。基数排序将待排序的元素拆分为个关键字,逐一对各个关键字排序后完成对所有元素的排序。如果是从第关键字到第关键字顺序进行比较,则该基数排序称为 MSD(Most Significant Digit first)基数排序;如果是从第关键字到第关键字顺序进行比较,则该基数排序称为 LSD(Least Significant Digit first)基数排序。

w_w_wwwww的博客 1240

【AHE数据集】历史/未来全球网格热排放数据 PF-AHF

AHE数据集

WW、forever的博客 127

基数排序算法

文章目录一、基数排序概述二、基数排序的步骤三、基数排序的代码实现 一、基数排序概述 基数排序(radix sort)属于 “分配式排序”(distribution sort),又称 “桶子法”(bucket sort)。基数排序的基本思想是:通过待排序元素的各个位的值,将待排序元素分配至某些 “桶” 中,达到排序的效果。 基数排序是桶排序的扩展,基数排序法是效率高的稳定性排序法。 二、基数排序的步骤 基数排序过程一般遵循下面的基本步骤: 首先确定待排序序列 arr 中最大的元素,得出元素的位数 N,位

Ronz 的博客 2703

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基数排序详解

基本概念: 基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到

daiyudong2020的博客 5220

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++ 基数排序

基数排序的原理: (1)首先,把整数通过求余的方式拆分成“个位、十位、百位、… ”; (2)然后,统计每个整数的“个位、十位、百位、… ”出现的次数,之后把次数存到以“余数”为编号的桶子里; (3)最后,通过一个整数出现的次数-1,从而算出正确顺序的位置,再把整数放进去,就有顺序了。 #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

辛旭东小小工作室 824

【算法】基数排序

计数排序 学习基数排序之前首先学习计数排序。 计数排序假设每个元素都是在0到k之间的一个整数。 基数排序的基本思想,对于每个元素x,如果我们知道了小于x的元素的个数,就可以确定输出数组中元素x的位置,那么直接将元素x放到输出数组中。比如有3小于x的元素,那在输出数组中,x肯定位于第4个位置。 计数排序的算法用伪代码描述为: COUNTING-SORT(A,k) // 初始化数组C

weiersyuan的专栏 4416

基数排序·静态-链式

基数排序静态基数排序实现过程代码分析链式基数排序实现过程代码分析 静态基数排序 当m很大时,可以将一个记录的值即排序码拆分为多个部分来进行比较 例如:对0到9999之间的整数进行排序 1.将四位数看作是由四个排序码决定,即千,百,十,个位,其中千位为最高排序码,个位为最低排序码。基数r=10 2.可以按千百十个位数字依次进行4次桶式排序 3.4趟分配排序后,整个序列就排好序了 高位优先法: 先处理高位k d-1将序列分到若干桶中 然后再对每个桶处理次高位k d-2,分成更小的桶 依次重复,直到对k0排序后,

zhj12399的博客 1046

基数排序原理

算法和数据结构

实践求真知 622
上一篇: 堆排序
下一篇: 希尔排序
Scandinavians
博客等级 码龄19年 36粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值