【排序算法】基数排序(RadixSort)

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

基数排序:它不是比较关键字的大小,它是根据关键字中各位的值,通过对待排序的n个元素进行若干趟“分配”与“收集”来实现排序的。

设待排序的线性表中每个元素的关键字都是d位的十进制正整数。在排序的过程中需要对该线性表进行d次的分配与收集处理,每趟处理方法是相同的。在进行第j(j=1,2,...,d)次处理时,首先按元素在线性表中的排列顺序,依次将每个元素插入到编号为0~9的某个队列(关键字右起第j位上的值是多少就插入几号队列),这个过程叫做分配;然后按队列的标号从大到小,同一队列按插入先后的顺序,从队列中取出所有元素,重新构成一个线性表,这个过程叫做收集。在进行了d次的分配和收集之后,排序过程结束。


算法实现如下:

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

/*基数排序*/

int digitk(int Num,int k) //获取数字第k位,1代表个位
{
  int i=0;
  int temp=0;
  while(Num)
  {     
	  
	  temp=Num%10;
      Num=Num/10;
	  i++;
	  if(i==k)
	  {
		  break;
	  }

  }
  if(k>i)
	  temp=0;
  return temp;
}
void RadixSort(int Array[],int Len,int dMax)//Len为数组长度,dMax为数字的位数
{
    queue<int> *head=new queue<int>[10]; //创建10个队列,来保存各位为0,1...9.
     int i,j,k,temp;
     int m=0;
	for(i=1;i<=dMax;i++)
	{
           //分配
          for(j=0;j<Len;j++)
		  {     
			  
               temp=digitk(Array[j],i); //获取Array[j]的第i位数字
               head[temp].push(Array[j]);
			 
		  }
		  //收集
         for(k=0;k<10;k++)
		 {
             while(!head[k].empty())
			 {
                Array[m++]=head[k].front();
				head[k].pop();
			 }
		 }
		 m=0;
		 Display(Array,Len);
		 
        
	}

   delete [] head;
}
void main(int argc,char *argv[])
{
	
	int Array[]={35,44,46,9,23,202,10,124};
	int Len=sizeof(Array)/sizeof(int);	
RadixSort(Array,Len,3);
	 printf("排序好的数组为:");
	  Display(Array,Len);
}


radix sort 基数排序(radix sort), 的c++模板实现 立即下载

相关推荐

Radix Sort (基数排序)排序算法

Radix Sort (基数排序)排序算法

排序总结·八大排序

排序总结插入排序Shell排序选择排序直接选择排序堆排序交换排序冒泡排序 插入排序 void ImprovedInsertSort(int array[], int n) { int TempRecord; for (int i = 1; i < n; i++) { TempRecord = array[i]; int j = i - 1; //从i开始往前寻找记录i的正确位置 while ((j >= 0)

zhj12399的博客 408

基数排序_RADIXSORT

基数排序的排序工作在线性时间之内就可以完成,速度非常之快,这里给出了基于计数排序和桶排序的两种类型的基数排序算法

RadixSort(基数排序)——C语言实现

RadixSort(基数排序)——C语言实现

ctz6d1p的博客 673

基数排序——radix-sort

void radix_sort(int A[],int B[],int length,int d) { int i; for (i=1;i<=d;i++) { get_k(A,B,i,length,d); insert_sort(B,A,length); printf("\n\n第%d位排序完成的结果:\n\n",i); print_A(A,length); } }

利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行

dronekit: 一种用于无人机控制的python库。 dronekit-sitl:一种本地仿真工具,相当于本地虚拟化了一个无人机。 mavproxy:数据转发软件(类似于插线板的感觉,一个输入,多个相同的输出)。打开一个Anaconda prompt 首先激活相应的环境 然后运行如下命令: 保持2中的Anaconda prompt处于运行状态,另打开一个Anaconda prompt窗口,运行如下命令: tcp:127.0.0.1:5760: SITL默认端口,作为mavproxy的输入,把输入数据转发

Done___的博客 4344

数据结构--内排序

排序种类 排序子类 最坏时间效率 最好时间效率 平均时间效率 空间效率 插入排序 直接插入排序 shell排序 选择排序 直接选择排序 堆排序 分配排序 桶排序 基数排序 索引排序 直接插入排序 int i,j; for() ...

方塘半亩 199

TSMaster实战:如何用LIN总线唤醒你的汽车电子系统(附波形分析)

本文通过TSMaster工具实战解析LIN总线唤醒机制。详细介绍了LIN网络唤醒的协议要求、时序参数计算,并演示了如何在TSMaster中配置唤醒信号、捕获分析波形,以及验证休眠流程。文章结合常见问题排查,为汽车电子工程师提供了从理论到实践的完整调试指南。

weixin_28308325的博客 459

C++编写经典算法之一:基数排序RadixSort(又称:桶子法BucketSort)(通俗易懂)

基数排序 “基数排序”是数列排序的算法之一。 属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)。 基数,是同一类若干数据的集合,比如基数为个位数,那么个位数就是所有个位的数字的集合,通俗来说,你可以简单的理解为位数。 “基数排序”通常有两种排序思路,一种是从低位到高位,称之为LSD(Least significant digital),相对的,另...

kevinmeanscool的博客 1317

colmap+openMVS稠密重建

简要记录一下colmap+openMVS稠密重建相关使用。

weixin_41631106的博客 2241

9 硬件工程师笔面试高频知识考点真题解析——运算放大器

运算放大器(运放)摘要 运放是一种高增益、差分输入的模拟集成电路,具有虚短(线性区输入电压相等)和虚断(输入电流为零)特性,支持负反馈(线性放大)和开环/正反馈(饱和区比较)两种工作模式。关键特性包括高输入阻抗、低输出阻抗,理想运放参数(如无限增益)与实际参数(如有限带宽)的差异。 选型要点: 信号特性:直流/低频信号关注失调电压(Vos)、温漂;高频信号侧重带宽(GBW)和压摆率(SR)。 电源条件:单/双电源供电、电压范围及功耗需求(如电池设备需低静态电流)。 精度与噪声:微弱信号需低噪声运放,高精度场

XU157303764的博客 1673

经典排序算法(10)——基数排序算法详解

基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。 一、算法基本思想 (1)基本思想 基数排序是基于桶排序来实现。通过键值的部分信息,将要排序的元素分配至某些“桶”中,以此达到排序的作用。 基数排序的方式可以采用LSD(Least significant digital)或MSD

渴望,就奋力追寻... 3317

【WRFDA教程】客观分析(OBSGRID)详解

客观分析(OBSGRID)详解

WW、forever的博客 1133

排序算法-基数排序(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的专栏 538

火焰烟雾识别系统【数据集+源码+UI界面】

数据集准备:收集并标注火焰与烟雾数据。YOLOv10训练:训练YOLOv10模型来识别火焰和烟雾。实时检测:通过摄像头视频流进行实时检测,并显示检测结果。UI界面设计:用Tkinter设计简易界面,显示检测结果。完成以上步骤后,可以实现一个完整的火焰烟雾识别系统,具备实时检测与友好的用户界面。

2201_76125393的博客 1135

uniapp(vue3)- 详解安装/使用pinia报错reportJSException >>>> exception function:createInstanceContext, excepti

uniapp vue3 pinia报错reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack -> at useStore,H5网页,微信小程序,安卓App,苹果App,nvue,uniapp安装使用pinia出现报错at useStore,uniapp+vue3+ts 使用pinia报

🏆 前端领域优质创作者 4046

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

基数排序法与我们之前讨论的排序法不太一样,并不需要进行元素之间的比较操作,而是属于一种分配模式排序方式。基数排序法比较的方向可分为最高位优先(Most Significant Digit First,MSD)和最低位优先(Least Significant Digit First,LSD)两种。MSD是从最左边的位数开始比较的,而LSD则是从最右边的位数开始比较的。

Hank_W 838

代谢组数据分析(二十一):通过MetaboAnalystR标准化构建sPLSDA预测模型

本文介绍了如何使用R语言中的MetaboAnalystR包和mixOmics包进行代谢组学数据的标准化和sPLSDA分析。MetaboAnalystR包用于数据预处理,包括数据初始化、清洗、补足、过滤和标准化等步骤,以确保数据质量。mixOmics包则用于sPLSDA分析,通过Lasso惩罚进行变量选择,并建立分类模型。文章详细说明了安装和加载相关R包的步骤,并提供了数据导入和预处理的代码示例。最后,强调了数据预处理的重要性,以确保后续分析的准确性和可靠性。

专注生信领域 2426

十大排序算法之基数排序(RadixSort)

一、前言 数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会拿leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法 二、算法的思想 基数排序是一种非比较型排序算法,其原理是,将整数按位数切割成不同的数字,然后逐位比较。 三、算法的步骤 按照个位数进行排序:根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中。 将这些桶子中的数值重新...

Cxf2018的博客 392

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

排序算法-基数排序详细讲解(RadixSort)

public static int getNumLength(int num){ if(num == 0) return 1; int count = 0; for (int i = num; i != 0; i /= 10) { count++; } return count; } public static void RadixSort(int[] array){ in

信竞星球_少儿编程题库 334

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

排序算法-基数排序(radixSort)-C

思路: 基数排序是一种非比较排序,将整数按位数拆分不同的数字,依次对ge 时间复杂度: 程序: 参考:

Do 370

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基本排序算法之2——基数排序radixsort

  基数排序是基于桶式排序的变种,主要是为了通过多次遍历减少空间占用(效果相当显著)。其思路可以描述为:     1.首先待排序的序列要满足基数排序的特征,比如有“基数”的概念(整数和字符串都可以套用)     2.建立一个大小为“基数”的数组,数组每个元素是一个队列(为了节省空间应该使用链表实现)     3.根据序列的“位数”决定遍历的次数m,每次遍历相当于按某一位做桶式排序。重复的元素...

weixin_30246221的博客 121

排序算法--基数排序(RadixSort)的原理、排序过程及代码示例

基数排序(RadixSort) 概念介绍 基于比较排序算法的下界(合并排序,堆排序,快速排序…等)是Ω(nLogn),也就是说,他们不能做得比nLogn更好。 计数排序是一种线性时间排序算法,当元素在1到k的范围内时,以O(n+k)时间排序。 如果元素在1到n2的范围内呢? 这种情况不能使用计数排序,因为计数排序将花费O(n2),这比基于比较的排序算法更差。 如何在线性时间内对这样一个数组进行排序呢? 基数排序(RadixSort)能解决此问题。 基数排序的思想是从最低有效位数到最高有效位数逐个数字排序。基

penriver的博客 1463

排序算法笔记:基数排序 RadixSort in java

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33896726的博客 85

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

/** * 基数排序 基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。 * 然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。 * 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。 * 由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数, 所以基...

学习博客--记录学习历程 419

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

基数排序:import java.util.LinkedList; publicstaticvoidradixSort (int[]data,intradix,intdigits){ //radix表示基数(进制),digits表示最大数值位数 LinkedList<LinkedList> queue= new LinkedList<LinkedList>();

gaven的博客 2287
上一篇: 【排序算法】直接选择排序(SelectSort)与冒泡排序(BubbleSort)
下一篇: 图的存储与遍历
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值