import java.math.BigInteger; import java.util.*; import static java.lang.Math.pow; public class Sort { public static int[] sort(int[] numbers) { @SuppressWarnings(value = "unchecked") ArrayList<Integer>[] buckets = new ArrayList[10]; for (int i = 0; i < 10; i++) {buckets[i] = new ArrayList<Integer>();} int maximum = numbers[0]; for (int i = 1; i < numbers.length; i++) {if (numbers[i] > maximum) {maximum = numbers[i];}} byte max = -1; for (; maximum > 0; maximum /= 10) {max++;} //System.out.println(Arrays.toString(numbers) + "\n maximum: " + maximum + "\n max: " + max); for (byte i = 0; i <= max; i++) { for (int j = 0; j < numbers.length; j++) { if (numbers[j] < (int) pow(10, i)) {buckets[0].add(numbers[j]);} else {buckets[(numbers[j] / (int) pow(10, i)) % 10].add(numbers[j]);} } int index = 0; for (byte j = 0; j < 10; j++) { for (int k = 0; k < buckets[j].size(); k++) { numbers[index] = buckets[j].get(k); index++; } buckets[j].clear(); } } return numbers; } public static void main(String[] args) { if (args.length != 2) { System.out.println("Usage: java Sort size max, in which size is the number of elements and max is the upper bound (exclusive) of the array of integers"); return; } if (!((args[0] + args[1]).matches("[0-9]+"))) { System.out.println("size and max must be non-negative integers"); return; } BigInteger _size = new BigInteger(args[0]); BigInteger _max = new BigInteger(args[1]); BigInteger _maxInteger = new BigInteger(String.valueOf(Integer.MAX_VALUE)); if ((_size.compareTo(_maxInteger) == 1) || (_max.compareTo(_maxInteger) == 1)) { System.out.println("size and max must not exceed the maximum integer"); return; } int size = new Integer(args[0]); int max = new Integer(args[1]); int[] numbers = new int[size]; Random random = new Random(); for (int i = 0; i < size; i++) {numbers[i] = random.nextInt(max);} //System.out.println(Arrays.toString(Sort.sort(numbers))); } }