编辑代码

class Main {
	public static void main(String[] args) {
        //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
        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];
            }
        }
        //如果最小值小于0,将所有数都加上2147483647
        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;
    }
}