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;	
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java中输出数组元素的方法[通俗易懂]

    java中输出数组元素的方法[通俗易懂]定义一个数组:int[]array=newint{5,2,3,8};方法一:for(inti=0;i<array.length){ System.out.println(array[i]);}方法二:importjava.util.Arrays;System.out.println(Array.toString(array))方法三:…

    2022年10月11日
  • MySQL数据库:存储引擎

    MySQL数据库:存储引擎

  • MongoDB模糊查询($regex查询、正则表达式匹配查询)

    MongoDB模糊查询($regex查询、正则表达式匹配查询)MongoDB的模糊查询可以使用$regex运算符通过正则表达式来进行匹配查询。$regex:为查询中的模式匹配字符串提供正则表达式功能。语法:{<field>:{$regex:/pattern/,$options:‘’}}{<field>:{$regex:‘pattern’,$optio…

  • 26Region_tarim logai toplam

    26Region_tarim logai toplam给出 n 个点的一棵树,多次询问两点之间的最短距离。注意:边是无向的。所有节点的编号是 1,2,…,n。输入格式第一行为两个整数 n 和 m。n 表示点数,m 表示询问次数;下来 n−1 行,每行三个整数 x,y,k,表示点 x 和点 y 之间存在一条边长度为 k;再接下来 m 行,每行两个整数 x,y,表示询问点 x 到点 y 的最短距离。树中结点编号从 1 到 n。输出格式共 m 行,对于每次询问,输出一行询问结果。数据范围2≤n≤104,1≤m≤2×104,0<k≤1

  • 回归分析中自变量取舍、检验及多重共线性处理(VIF)「建议收藏」

    回归分析中自变量取舍、检验及多重共线性处理(VIF)「建议收藏」A1正交假定:误差项矩阵与X中每一个x向量都不相关高斯-马尔科夫定理:若满足A1和A2假定,则采用最小二乘法得到回归参数估计是最佳线性无偏估计方程估计值b1和b2可以看做偏回归系数,也是相应自变量对y的一种偏效应偏效应:在控制变量下,各自变量X对因变量Y的净效应残差项:针对具体模型而言,被定义为样本回归模型中观测值与预测值之差误差项:针对总体真实回归模型而言,它由一些不可观测因素或测量…

  • 页面中插入百度地图(使用百度地图API)

    页面中插入百度地图(使用百度地图API)

发表回复

您的电子邮箱地址不会被公开。

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