基数排序

原理:

 

伪代码:

 

java代码

import java.util.Arrays;

public class MyRadixSort {
	
	public static void sortPos(int[] arr , int exp){
		int [] bucket = new int[10];
		int [] output = new int[arr.length];
		for(int i = 0 ; i <arr.length ; i++){
			int last = getLast(arr[i],exp);
			bucket[last] ++;
		}
		for(int i=1;i<bucket.length;i++){
			bucket[i]+=bucket[i-1];
		}
		for(int i = arr.length-1;i>=0;i--){
			int last = getLast(arr[i],exp);
			//System.out.println("Last of "+arr[i]+" is "+last);
			int index = bucket[last] -1;
			output[index] = arr[i];
			bucket[last]--;
		}
		System.arraycopy(output, 0, arr, 0, arr.length);
	}
	public static void bucketSort(int[] arr){
		int max = getMax(arr);
		for(int exp=1;max/exp>0;exp*=10){
			sortPos(arr,exp);
		}
		System.out.println(Arrays.toString(arr));
	}
	private static int getMax(int[] arr) {
		int max = 0;
		for(int i : arr){
			if(i>max) max = i;
		}
		return max;
	}
	public static void main(String[] args) {
		int[] arr = new int[]{1,41,56,98,123,45,26};
		bucketSort(arr);
	}

	private static int getLast(int i, int exp) {
		i/=exp;
		return i%10;
	}

}

 

关于sortPos最后一个for为什么要倒序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值