java基数排序

原理:

1、按照0-9定义十个空间,将数据按照个位,十位、百位····依次进行排序(每一进制位排完序后取出,按照下一进制位再次排序,重复操作,直到最高位)

代码:

package 排序;

import java.util.Arrays;



public class RadixSort {
	public static void main(String[] args) {
		int[] arr = {5,55,6,48,872,62,4};
		sort(arr);
		System.out.println(Arrays.toString(arr));
	}
	//基数排序
	public static void sort(int[] arr) {
		//找数组当中的最大值
		int max  =arr[0];
		for(int j=0;j<arr.length;j++) {
			if(arr[j]>max) {
				max=arr[j];
			}
		}
		//获取最大值的位数
		int maxLength = (max+"").length();//加"",max变为字符串
		//定义空间
		int[][] bucket = new int[10][arr.length];
		//定义空间记录工具
		int [] bucketCounts = new int[10];
		int n=1;
		for(int h=0;h<maxLength;h++) {
			//将数据放到空间里
		    for(int i=0;i<arr.length;i++) {
		    	//放到哪个空间
			    int element = arr[i]/n%10;//获取个位数值,element代表进制位数值,也代表放到哪个空间
			    //读取空间记录工具,确定放到空间哪个位置
			    int count = bucketCounts[element];
			    //数据放入
			    bucket[element][count] = arr[i];
			    //空间记录+1
			    bucketCounts[element]++;
		}
		//数据取出
		//遍历数组
		int index=0;
		//遍历空间记录
		for(int k=0;k<bucketCounts.length;k++) {
			if(bucketCounts[k]!=0) {
				for(int l = 0;l<bucketCounts[k];l++) {
					arr[index] = bucket[k][l];
					index++;
				}
			}
			bucketCounts[k]=0;
		}
		n=n*10;
	 }
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值