private void radixSort0(int[] a, int i, int low, int high) {
        if (i < 0)
            return;
        
        Queue[] registers = new Queue[RADIX];
        
        for (int n = 0; n < registers.length; n++) {
            registers[n] = new LinkedList<Integer>();
        }

        for (int j = low; j < high; j++)
            registers[getDigit(a[j], i)].offer(a[j]);

        //printInfo(i);
        int index = low;

        for (Queue register : registers) {
            int low2 = index;

            while (!register.isEmpty()) {
                set(index++, (Integer) register.poll());
            }

            int high2 = index;
            radixSort0(a, i - 1, low2, high2);
        }
    }