package com.sort;
public class RadixSort {
public static int[] radixSort(int [] data,int d){
int []source=new int[data.length];
int []target=new int[data.length];
for(int i=0;i<d;i++){
for(int j=0;j<data.length;j++){
source[j]=buildBitValue(data[j],i);
}
countingSort(data,source,target);
data=target;
target=new int[data.length];
}
return data;
}
private static int buildBitValue(int value,int i){
if(i==0){
return value%((int)Math.pow(10, i+1));
}else{
return (value/((int)Math.pow(10, i)))%10;
}
}
public static void countingSort(int []full,int []source,int[]target){
int k=10;
int[] c=new int[k];
for(int i=0;i<source.length;i++){
c[source[i]]=c[source[i]]+1;
}
for(int i=1;i<k;i++){
c[i]=c[i]+c[i-1];
}
for(int i=source.length-1;i>=0;i--){
target[c[source[i]]-1]=full[i];
c[source[i]]=c[source[i]]-1;
}
}
public static void main(String[] args) {
int [] data=new int[]{11,41,31,81,11,61,19};
for(int i=0;i<data.length;i++){
System.out.print(data[i]+" ");
}
System.out.println();
data=radixSort(data,2);
for(int i=0;i<data.length;i++){
System.out.print(data[i]+" ");
}
System.out.println();
}
}