參考文章:https://www.jianshu.com/p/cc607d631b5e
import java.util.Arrays;
public class RadixSort2 {
private static int BASE_NUM = 10;
private static int getMax(int[] data){
int maxIndex = 0;
int length = data.length;
for(int i=0; i<length; i++){
if(data[i]<0){
throw new RuntimeException("data is less than 0");
}
if(data[maxIndex] < data[i]){
maxIndex = i;
}
}
return data[maxIndex];
}
private static void clearArr(int[] data){
Arrays.fill(data, 0);
}
public static void radixSort2(int[] data){
int max = getMax(data);
int length = data.length;
int[] countArr = new int[BASE_NUM];
int[][] sortedArr = new int[BASE_NUM][length];
int index = 0, k=1;
while(max>k){
for(int i=0; i<length; i++){
int remainder = data[i] / k % 10;
sortedArr[remainder][countArr[remainder]] = data[i];
countArr[remainder]++;
}
for(int i=0; i<BASE_NUM; i++){
for(int num =0; num < countArr[i]; num++){
data[index++] = sortedArr[i][num];
}
}
clearArr(countArr);
index = 0;
k *= 10;
}
}
}