原理:
伪代码:
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为什么要倒序