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)
上一篇 2022年5月6日 上午9:04
下一篇 2022年5月6日 上午9:04


相关推荐

  • 破坏ice的服务器消息,我的世界:ICE服务器炸,矛头指向Mn,但真相另有隐情!…

    破坏ice的服务器消息,我的世界:ICE服务器炸,矛头指向Mn,但真相另有隐情!…在游戏界中,有一场游戏玩家之间的“战争”,那就是《我的世界》和《迷你世界》。这场战争本来已经停息了很久,但是又因为某些事情,让它快速的发酵了起来。这件事情的原由是因为《我的世界》的ICE服务器被炸,具体经过小编下面为大家讲解。3月25号(大约时间),一个名为ICE的《我的世界》服务器被其他玩家恶意毁坏了,里面的建筑变得残破不堪,而服务器的存档也仅仅只有数天前的。要知道,这些建筑是很多玩家用大量的时…

    2022年6月12日
    53
  • pycharm中使用anaconda部署python环境_pycharm怎么用anaconda的环境

    pycharm中使用anaconda部署python环境_pycharm怎么用anaconda的环境每一种语言的开发环境都是包含了运行环境和开源包两个核心内容。比如Java,JDK是运行环境,而开发导入需要用到的各种第三方工具都是以开源包的形式导入的。再比如Python,python3.6/python2.7是它的运行环境,而pynum,pandas这些数据处理工具就是也是开源包。通常情况下,我们都是使用IDE在项目中统一管理运行环境和开源包。比如开发JavaWeb项目我们使用Myec…

    2022年8月27日
    6
  • PyCharm基本设置 – 【图文】

    PyCharm基本设置 – 【图文】PyCharm 基本设置主要从三个方面讲解 第一个是 PyCharm 界面的外观设置 第二个是关于 Python 解释器的设置 第三个是项目管理功能的项目设置 设置的总查找路径 File Settings DefaultSetti 具体步骤 在 PyCharm 界面的头部的导航栏上找到 File 点击 File 点击 Settings 一 PyCharm 界面的外观设置 1 1 修改主题具体步骤 Appearance amp Behavior

    2026年3月27日
    3
  • 64位Win10 Modelsim破解及证书LICENSE.TXT无法生成解决方法

    64位Win10 Modelsim破解及证书LICENSE.TXT无法生成解决方法将patch_dll.bat和MentorKG.exe放到安装目录的win64目录下安装时一路点YES,可以不用重启。方法1:找到安装目录下win64的mgls64.dll,取消只读         打开cmd(快捷键:super+R,输入cmd)         输入E:(安装磁盘)回车         输入cd :/Modelsim/win64(安装目录中的wi

    2022年5月24日
    101
  • n8n部署RAG太麻烦?MCP+自然语言搞定n8n workflow 的时代来了!

    n8n部署RAG太麻烦?MCP+自然语言搞定n8n workflow 的时代来了!

    2026年3月13日
    2
  • 汉诺塔的图解递归算法

    汉诺塔的图解递归算法参考原文链接 1 http www cnblogs com dmego p 5965835 html2 https blog csdn net xb2355404 article details 79144451 一 起源 汉诺塔 又称河内塔 问题是源于印度一个古老传说的益智玩具 大梵天创造世界的时候做了三根金刚石柱子 在一根

    2026年3月26日
    3

发表回复

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

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