基数排序算法

本文解析了基数排序的基本思想,通过将数值补零达到统一长度,按最低位到最高位逐位排序。通过Java代码展示了如何使用桶排序法实现这一算法,适用于整数数组的快速排序。

基本思想:将所有待比较的值进行统一长度,位数较短的后面进行补零,然后从最低位开始依次进行排序,这样从最低位到最高位排序完成即完成整个排序。

public static void radixSort(int[] arr) {
	//求出最大值
	int max = Integer.MIN_VALUE;
	for(int i : arr) {
		if(i > max) {
			max = i;
		}
	}
	//计算最大值的长度,即循环次数
	int maxLength = (max+"").length();
	//创建桶 十个桶
	Map<Integer,ArrayDeque> radixMap = new HashMap<Integer,ArrayDeque>();
	for(int i=0;i<10;i++) {
		radixMap.put(i, new ArrayDeque<>());
	}
	//开始循环
	//定义循环需要取模的值
	int cycle = 1;
	for(int i = 0;i < maxLength ;i++) {
		//1,桶中放数据
		for(int j = 0; j < arr.length ; j++) {
			int bucket = (arr[j]/cycle)%10;
			radixMap.get(bucket).addFirst(arr[j]);
		}
		int index = 0;
		for(int k= 0; k<10 ; k++) {
			ArrayDeque deque = radixMap.get(k);
			Integer temp;
			while((temp = (Integer) deque.pollLast()) != null) {
				arr[index++] = temp;
			}
		}
		cycle *= 10;
	}
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值