class Main {
public static void main(String[] args) {
int arr[] = {555,86,13,4,679,796,46,-12,-2};
int[] result = radixSort(arr);
for(int i : result){
System.out.println(i + " ");
}
}
public static int[] radixSort(int[] arr){
int max = Integer.MIN_VALUE,min = Integer.MAX_VALUE;
for(int i = 0;i < arr.length;i++){
if(arr[i] > max){
max = arr[i];
}
if(arr[i] < min){
min = arr[i];
}
}
if(min < 0){
for(int i = 0; i < arr.length; i++){
arr[i] -= min;
}
max -= min;
}
int maxLength = (int) Math.log10(max) + 1;
int bucketCount = 10;
int [][] bucket = new int[bucketCount][arr.length];
int [] bucketIndex = new int[bucketCount];
for(int i = 0,n = 1;i<maxLength;i++,n*=10){
for(int j = 0;j<arr.length; j++){
int digit = Math.abs(arr[j] / n % 10);
bucket[digit][bucketIndex[digit]] = arr[j];
bucketIndex[digit]++;
}
int index = 0;
for (int j = 0;j<bucketCount;j++){
if(bucketIndex[j]!=0){
for(int k = 0;k<bucketIndex[j];k++){
arr[index] = bucket[j][k];
index++;
}
}
bucketIndex[j]=0;
}
}
if(min < 0){
for(int i=0;i<arr.length;i++){
arr[i] += min;
}
}
return arr;
}
}