public static void sort(int[] array) {
		if (array == null)
			return;
		
		int maxDivisor = findMaxDivisor(array);
		
		// iterate through one digit per loop, starting from LSD
		for (int divisor = 1; divisor <= maxDivisor; divisor *= BASE) {
			// create list of buckets
			ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(BASE);
			for (int i = 0; i < BASE; i++)
				list.add(new ArrayList<Integer>());
			
			// sort numbers into radix buckets
			for (int num : array)
				list.get((num / divisor) % BASE).add(num);
			
			// empty buckets back into original array
			for (int j = 0, k = 0; j < BASE; j++) {
				for (int i : list.get(j))
					array[k++] = i;
			}
		}
	}