class Main {
public static void main(String[] args) {
int[] arr1 = {20,10,5,4,48,12,30,56,76,15,47,68,48,15};
radixSort(arr1);
display(arr1);
}
public static int findMax(int[] arr){
int max = arr[0];
for(int i = 1; i < arr.length; i++){
if(arr[i] > max){
max = arr[i];
}
}
return max;
}
public static int calBitCount(int max){
int count = 0;
while(max > 0){
count++;
max = max / 10;
}
return count;
}
public static int getBitValue(int num,int b){
for(int i = 0; i<b-1;i++){
num = num / 10;
}
num = num % 10;
return num;
}
public static void display(int[] arr){
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
System.out.println("");
}
public static void radixSort(int[] arr){
int max = findMax(arr);
int bitCount = calBitCount(max);
for(int b = 1; b <= bitCount; b++){
int radixCount = 10;
int[] count = new int[radixCount];
int[] tempArray = new int[arr.length];
for(int i = 0;i < arr.length; i++){
int bitValue = getBitValue(arr[i],b);
count[bitValue]++;
}
for(int c = 1; c < radixCount; c++ ){
count[c] = count[c] + count[c-1];
}
for(int i = arr.length-1; i >= 0; i--){
int index = getBitValue(arr[i],b);
tempArray[--count[index]] = arr[i];
}
for(int i = 0; i < arr.length; i++){
arr[i] = tempArray[i];
}
}
}
}