前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java数据结构与算法(排序)——基数排序(LSD)

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

作者头像
全栈程序员站长
发布2022-08-23 12:44:49
3700
发布2022-08-23 12:44:49
举报
文章被收录于专栏:全栈程序员必看

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

一、基本思想

最低位优先法,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。这时数列已经有序。若数列中有三位数以上,则再根据百位进行排序,以此类推,直至最高位为止。

三、代码实现

代码语言:javascript
复制
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.cn/137943.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月6,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、基本思想
  • 二、举例分析
  • 三、代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档