Java数据结构与算法(排序)——基数排序(LSD)

Java数据结构与算法(排序)——基数排序(LSD)一、基本思想先从最低位开始排序,再对次低位排序,直到对最高位排序后得到一个有序序列(位数不同时高位补0)。二、举例分析假设有一串数列:73,22,93,43,55,14,28,65,39,81。排序过程如下:(1)先根据个位进行排序,得到:0——1——812——223——73,93,434——145——55,656——7——8——289——39(2…

大家好,又见面了,我是你们的朋友全栈君。

一、基本思想

最低位优先法,LSD(Least significant digital)—— 先从最低位开始排序,再对次低位排序,直到对最高位排序后得到一个有序序列(位数不同时高位补 0)。

二、举例分析

假设有一串数列:73, 22, 93, 43, 55, 14, 28, 65, 39, 81。排序过程如下:
(1)先根据个位进行排序,得到:
0——
1——81
2——22
3——73,93,43
4——14
5——55,65
6——
7——
8——28
9——39
(2)将按个位排序的结果整理得到新数列:81, 22, 73, 93, 43, 14, 55, 65, 28, 39。再根据十位进行排序,得到:
0——
1——14
2——22,28
3——39
4——43
5——55
6——65
7——73
8——81
9——93
(3)将按十位排序的结果整理得到新数列:14, 22, 28, 39, 43, 55, 65, 73, 81, 93。这时数列已经有序。若数列中有三位数以上,则再根据百位进行排序,以此类推,直至最高位为止。

三、代码实现

public int[] radixSort(int[] sourceArray){ 
   
	// 复制数组
	int[] array = Arrays.copyOf(sourceArray, sourceArray.length);
	// 找数组中的最大值
	int maxValue = array[0];
	for (int i = 1; i < array.length; i++) { 
   
		if(maxValue < array[i])
			maxValue = array[i];
	}
	// 最大值的位数
	double d = Math.pow(10, String.valueOf(maxValue).length());
		
	int k = 1;
	int[][] t = new int[10][array.length];// 桶,0~9共十位,创建十个桶;
	int[] num = new int[10];// 记录每个桶中存入数的个数
	while(k < d){ 
   
		// 按位存入桶中:k = 1时,按个位;k = 10时,按十位……
		for(int a : array){ 
   
			int m = (a / k) % 10;
			t[m][num[m]] = a;
			num[m]++;
		}
		// 从桶中取出放回array。k=1时,是按个位排序的结果;k=10时,是按十位排序的结果……
		int c = 0;
		for (int i = 0; i < 10; i++) { 
   
			if(num[i] != 0){ 
   
				for (int j = 0; j < num[i]; j++) { 
   
					array[c++] = t[i][j];
				}
			}
			num[i] = 0;
		}
		k = k * 10;
	}
	return array;	
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137943.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mysql数据库表结构设计导出[通俗易懂]

    Mysql数据库表结构设计导出[通俗易懂]SELECTCOLUMN_NAME字段名,COLUMN_TYPE数据类型(长度),–DATA_TYPE字段类型,–CHARACTER_MAXIMUM_LENGTH长度,if(IS_NULLABLE=’NO’,’否’,’是’)是否为空, if(COLUMN_KEY=’PRI’,’是’,’否’) 是否为主键,–COLUMN_DEFAULT默认值,COLUMN_COMMENT说明FROMINFO

    2022年9月12日
    2
  • cms垃圾收集器采用的回收算法_垃圾回收处理厂

    cms垃圾收集器采用的回收算法_垃圾回收处理厂CMSconcurrentmarkssweep并行标记清除垃圾回收机制。此篇文章是根据众多网上资料总结的关于CMS垃圾回收器的相关知识点。便于个人总结和回忆。垃圾回收器类型1、串行回收,Serial回收器,单线程回收,全程stw;2、并行回收,名称以Parallel开头的回收器,多线程回收,全程stw;3、并发回收,cms与G1,多线程分阶段回收,只有某阶段会stw;CMS垃圾回…

    2022年10月13日
    1
  • html中offsetleft属性,offsetleft兼容性的理解

    html中offsetleft属性,offsetleft兼容性的理解关于此属性的基本用法可以参阅 offsetleft 属性用法详解一章节 此属性具有一定的兼容性问题 那就是在 IE7 浏览器中 它的返回值是想对于最近的父辈元素的左侧的距离 上面的代码在其他浏览器中返回值是 100 但是在 IE7 浏览器中返回值是 50 至于 IE6 没有测试 感兴趣的大家可以做一下测试 下面抽点空给大家介绍 offsetLeft 与 style left 的区别 offsetLeft 获取的是相对于父对象的

    2025年7月15日
    3
  • Pycharm配置git环境「建议收藏」

    Pycharm配置git环境「建议收藏」Pycharm配置git环境在网上查了一些发现都已经过时了,有的根本没办法用,自己摸索了一下午。捣鼓的差不多了至少可以用hhhh默认各位老铁都已经安装好了,Git咯,并且有自己的github网址或者gitee网站咯0X1创建一个新项目首先新键一个新的项目,直接creat就好了创建好了如下:0X2匹配GitFile->Settings->VersionControl->Git详情如下:找到Setting,点击进入找到VersionControl,

    2022年8月28日
    5
  • 平面向量积的坐标运算公式推导_平面向量的内积公式推导过程

    平面向量积的坐标运算公式推导_平面向量的内积公式推导过程向量内积的坐标表示7.11向量内积的坐标表示授课人:邱群灯*7.11向量内积的坐标表示向量的内积a⊥ba·b=0(判断两向量垂直的依据)运算律:1.2.3.平面向量基本定理:如果是同一平面内的两个不共线向量,那么对于平面内的任一向量a,有且只有与一对实数…

    2022年9月24日
    3
  • linux收发邮件_python邮件发送

    linux收发邮件_python邮件发送linux邮件传输一般用在特定的网络环境下,记住,只要有网络,就能办事;闲话少扯,直接上干货:步骤1邮箱设置开启STMP服务,开启后会收到STMP授权码。多种邮箱都有这个功能,申请后把你的授权码记住了。步骤2linux命令:/etc/mail.rc配置邮件发送参数将以下数据加到最下面(如下图):#邮箱setfrom=843903492@qq.com#默…

    2022年10月20日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号