基数排序-RadixSort

基数排序RadixSort(全网最详细) 感觉网上很多排序算法都写的不够详细,写一个最详细的过程 阅读详情

一. 算法描述

基数排序(以整形为例),将整形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】序列为例,具体细节如下图所示:
这里写图片描述
这里写图片描述
这里写图片描述

在数据中最高位为3,进行了三次分配、收集过程后,变成有序数组。

二. 算法实现

#define RADIX_10 10    //整形排序
#define KEYNUM_31 10     //关键字个数,这里为整形位数

//获取num的从右往左的第pos位的值
int getRadixNumInPos(int num,int pos){
    int base=1;
    for(int i=1;i<pos;i++){
        base*=10;
    }
    return (num/base)%10;
}

void radixSort(vector<int> &nums){
    int length=nums.size();
    //声明二维基数矩阵,用作排序
    //其中,radixArrays[i][0]作为radixArrays[i]的长度计数
    vector<vector<int>> radixArrays(RADIX_10, vector<int>(length+1,0));
    for(int pos=1;pos<=KEYNUM_31;pos++){
        //分配
        for(int i=0;i<length;i++){
            int radixNum=getRadixNumInPos(nums[i], pos);
            int index=++radixArrays[radixNum][0];
            radixArrays[radixNum][index]=nums[i];
        }
        //收集
        int k=0;
        for(int i=0;i<RADIX_10;i++){
            for(int j=1;j<=radixArrays[i][0];j++){
                nums[k++]=radixArrays[i][j];
            }
            radixArrays[i][0]=0;
        }
    }
}

三. 算法分析

平均时间复杂度:O(dn)(d即表示整形的最高位数)

空间复杂度:O(10n) (10表示0~9,用于存储临时的序列)

稳定性:稳定排序

JavaScript实现RadixSort基数排序算法(附完整源码) JavaScript实现RadixSort基数排序算法(附完整源码)Comparator.js完整源代码Sort.js完整源代码RadixSort.js完整源代码 Comparator.js完整源代码 export default class Comparator { constructor(compareFunction) { this.compare = compareFunction || Comparator.defaultCompareFunction; } static de 阅读详情

相关推荐

JAVA:实现RadixSort基数排序算法(附完整源码)

JAVA:实现RadixSort基数排序算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 520

【算法学习】排序算法 基数排序

文章目录1. 概述2. 计数排序及实现3. 基数排序(1) 简要介绍(2) 具体实现:10进制低位优先基数排序(3) 优化:65536进制低位优先基数排序(3) 毒瘤实现:256进制低位优先基数排序 1. 概述 我们学过很多排序算法,简单的如冒泡排序、插入排序,麻烦一点的如希尔排序(还不一定写得对)、堆排序,派的上用场的如归并排序、快速排序。实际上,快速排序和归并排序已经够用了,它们的平均时间复杂度为 O(nlog⁡n)O(n\log n)O(nlogn) ,任何基于比较的排序算法的时间复杂度都不可能比这

memcpy0的博客 2591

CUDA:radixSort基数排序的实例

CUDA:radixSort基数排序的实例

希望我的博客,能帮上你解决学习中工作中所遇到的问题 580

基数排序 习题

基数排序 时间限制:10 sec 空间限制:1 GB 问题描述 给定 n 个 [0,2^k) 之间的整数,请你将它们升序排序。 由于 n 可能很大,为了避免过大的输入、输出规模,我们会在程序内部生成数据,并要求你输出排序后序列的哈希值。具体方法如下(用c++代码展示): typedef unsigned int u32; u32 nextInt(u32 x){ x^=x<<13; x^...

weixin_43829465的博客 1128

JavaScript:实现RadixSort基数排序算法(附完整源码)

JavaScript:实现RadixSort基数排序算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 457

链式基数排序 数据结构 c语言版

书上没有此算法的实现,参考了些函数,自己写了主函数和调试 静态链表存储结构 基数排序

左神算法2:排序(快排、堆排、桶排、计数与基数排序简单介绍) 荷兰国旗问题 大根堆小根堆 排序稳定性 比较器 相邻两数的最大差值问题

1.荷兰国旗问题 定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。 要求时间复杂度为O(N)、额外空间复杂度为O(1)。 分析:三个指针法:一个指向前头less,一个指向尾部more,一个是当前下标cur。当前下标由指向前面的指针推着前进。 import java.util.Arrays; public class...

qq_43185543的博客 581

C语言中数据结构之链式基数排序

主要介绍了C语言中数据结构之链式基数排序的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

基数排序RadixSort二进制的实现

基数排序RadixSort二进制的实现 基本概念:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 基数排序的方式可以采用LSD或MSD,LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。 源码: public class RadixSort { ...

m0_46451044的博客 1088

测试工程师玩转DeepSeek之Prompt

掌握这些提示词技巧,测试工程师可提升与DeepSeek的协作效率至少3倍。建议结合具体项目上下文进行二次优化,并建立团队内部的提示词知识共享库。✅ “为电商支付接口生成包含幂等性验证的测试用例,覆盖网络中断重试场景”❌ “帮我写测试用例”

weixin_44872675的博客 2262

MEG预处理-Brainstorm

Brainstorm下载和安装 去Brainstorm官网进行下载:打开网页后,点击左侧Download;在跳出来的界面中进行简单的注册,注册完成后可以进行下载 解压后得到“brainstorm3”的文件夹,里面包含Brainstorm工具包的所有文件,把这个文件夹放在某个路径如"E:\matlab_tools\brainstorm3"即可 同样在某个路径建立空的文件夹命名为:brainstorm_db用于工具包运行过程中自动存储生成的文件,所以这个文件中生成的数据不要手动移动删除 在Matlab中,把.

AxeChen的博客 6124

排序算法-基数排序(RadixSort)

#include #include using namespace std; int pow10(int n) { int result = 10; if (n==0) { return 1; } for (int i = 0;i < n;i++) { result *= 10; } return result; } void radixSort(int *L,

hello556的专栏 539

篮球比赛24秒计时器改造指南:用Multisim实现可调式倒计时系统

本文详细介绍了如何使用Multisim软件改造篮球比赛24秒计时器,实现可调式倒计时系统。从脉冲信号发生器到声光报警模块,提供了完整的电路设计方案和调试技巧,帮助开发者快速掌握数字电路设计的核心原理,提升体育电子设备开发效率。

wood5的博客 211

RadixSort基数排序

核心算法: void RadixPass(RcdType rcd[], RcdType rcd1[], int n, int i, int count[], int pos[], int radix) { //对数组rcd中记录关键字的第i位计数,计算得到起始位置数组pos //按照起始位置数组pos将rcd中的记录复制到数组rcd1中 int k, j; for (k = 1; k <

Junhan's Blog 625

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 330

6.4 直流无刷电机(BLDC):测试与性能评估

本文系统阐述了直流无刷电机(BLDC)的测试与性能评估方法,涵盖参数测量、性能测试、测试平台设计及可靠性评估。详细介绍了绕组电阻、电感和反电动势的测量原理与修正方法,以及转矩-转速特性、效率分析和动态响应测试的技术要点。通过搭建高精度测功机系统,结合自动化数据处理,实现对电机性能的全面评估。最后讨论了温升、振动、EMC等特殊测试方法,为BLDC电机的设计验证和质量控制提供了完整的技术路径。

技术工作者 444

spark RadixSort基数排序源码实现

Spark版本2.4.0 Spark的RadixSort基数排序实现的排序容器基于一个LongArray实现。 在LongArray中,一个元素的长度为8字节,当排序的时候,将是每8个字节确定一个元素。 public static int sort( LongArray array, long numRecords, int startByteIndex, int endBy...

不说话装高手 497

Windows远程桌面开发之九-虚拟显示器(Windows 10 Indirect Display 虚拟显示器驱动开发)

by fanxiushu 2019-06-24 转载或引用请注明原始作者。 这里与远程桌面关系不是太大,但这个部分是xdisp_virt远程控制程序的实现多显示器桌面扩展的子功能,因此也归为远程桌面开发一类。 这篇文章与之前发布的...

fanxiushu的专栏 2万+

基数排序 RadixSort

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

sytdsqzr的博客 428

AI OS与LLM as OS:人工智能操作系统的崛起

近年来,随着大语言模型(Large Language Model, LLM)技术的突飞猛进,人工智能领域掀起了新的革命浪潮。以ChatGPT、GPT-4等为代表的LLM模型展现出了惊人的自然语言理解和生成能力,使得人机交互前所未有地拟人化、情境化。在此背景下,业界开始探索将LLM作为操作系统(Operating System, OS)的可能性,由此催生出"AI OS"和"LLM as OS"的概念。本文将深入解读这两个前沿概念,分析其内涵、技术原理、应用前景及面临的挑战。

AI天才研究院 993

RT-DETR的AIF模块+YOLOv8:融合注意力与特征交互,打造实时检测的科研级进阶方案

从理解AIF模块“细粒度注意力+跨尺度交互”的核心设计,到亲手将其嵌入YOLOv8并验证在复杂场景的表现,再到基于此探索属于自己的科研与工程方向——这个过程能让你深刻理解“注意力机制与CNN融合”在实时检测中的核心价值。现在就开始行动,相信你会在实时目标检测的“智能进化”之路上,走出一条属于自己的技术路径。从实验对比图可见,集成AIF模块的YOLOv8,其mAP(平均精度)在多个阈值下均有提升,尤其是mAP50-95(高IoU阈值下的精度)提升更为显著,充分证明了AIF对细粒度特征的捕捉能力。

m0_64661770的博客 188

radixSort 基数排序<桶排序>

package sort; import java.util.Arrays; public class RadixSort { public static void main(String[] args) { int[] a = {5,4,3,2,1,9,8,96,75}; a = sort(a, 9, 2, 10); System.out.println(Arrays.toString(a)); } public static int[] sort(int[] a, int

qq_48974601的博客 177

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

用queue实现的基数排序RadixSort

代码是用queue实现的基数排序,其中arrlength表示数组长度,maxbit表示arr数组中int型整数的最大位数,如果maxbit=3,表示最大为3位数,即不超过999 /************************************** /* /* 函数名 : Radix Sort /* **********************************

ZkvIA的博客 1349

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Arduino步进电机库函数控制实战指南

步进电机是嵌入式运动控制的基础执行单元,其核心原理在于通过脉冲序列驱动转子按固定步距角旋转。AccelStepper等成熟库函数将底层时序、加减速曲线和多轴协同抽象为高层API,显著降低开发门槛。技术价值体现在非阻塞运行、物理参数可配置(如setMaxSpeed、setAcceleration)及简易闭环支持,广泛应用于智能小车、XY绘图仪、3D打印和云台稳定等场景。本文聚焦Arduino平台下基于AccelStepper与MultiStepper的工程化落地,涵盖接线规范、参数调优、丢步检测与多轴同步等关

weixin_33937913的博客 303

基数排序_RADIXSORT

基数排序_RADIXSORT 基数排序的思想 基数排序算法实现 基于计数排序的基数排序 基于最优桶排序的基数排序 基数排序_RADIXSORT基数排序是一种基于计数排序_COUNTINGSORT或者是最优桶排序(当然也可以基于其他排序算法,只不过计数排序对于基数排序来说应该是最快的了,因为二者的拼音都是jishupaixu,哈哈)的一种可以在线性时间O(n)O(n)完成的排序算法。博主在做基数排序的

qeesung的专栏 1603

基数排序—RadixSort

基数排序 基数排序(桶排序)介绍: 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法 基数排序(Radix Sort)是桶排序的扩展 基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。

跑马去追XX 269
上一篇: 冒泡排序-Bubble Sort
下一篇: 桶排序-Bucket Sort
HelloCooper
博客等级 码龄11年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值