编辑代码

import java.util.Arrays;

public class RadixSort {
    public static void radixSort(int[] array) {
        if (array.length == 0)
            return;

        int max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max)
                max = array[i];
        }

        int exp = 1, len = String.valueOf(max).length();
        int[] bucket = new int[10];

        while (len-- > 0) {
            int[] tmp = new int[array.length];
            System.arraycopy(array, 0, tmp, 0, array.length);

            Arrays.fill(bucket, 0);

            for (int i = 0; i < array.length; i++) {
                int digit = (tmp[i] / exp) % 10;
                bucket[digit]++;
            }

            for (int i = 1; i < bucket.length; i++) {
                bucket[i] += bucket[i - 1];
            }

            for (int i = array.length - 1; i >= 0; i--) {
                int digit = (tmp[i] / exp) % 10;
                array[--bucket[digit]] = tmp[i];
            }

            exp *= 10;
        }
    }

    public static void main(String[] args) {
        int[] array = {5, 2, 9, 6, 1, 3, 12};
        radixSort(array);
        System.out.println(Arrays.toString(array));
    }
}