import java.io.*; public class Radix { /** Get the max value of an array * @param array an integer array * @return max value of the array */ public static int getMax(int [] array) { int max = array[0]; for(int i = 1; i < array.length; i++) if(array[i] > max) max = array[i]; return max; } /** Use counting sort to sort array by a specific digit * @param A an integer array * @param exp contol digit that will be used to sort array, such as 1, 10, 100, ... * @throws ArrayIndexOutOfBoundsException */ public static void countingSort(int [] A, int exp) throws ArrayIndexOutOfBoundsException { int [] B = new int[A.length]; int [] C = new int[10]; for(int i = 0; i < A.length; i++) C[A[i]/exp%10] += 1; for(int i = 1; i < 10; i++) C[i] = C[i] + C[i-1]; //display(C); for(int i = A.length-1; i >= 0; i--) { B[C[A[i]/exp%10]-1] = A[i]; C[A[i]/exp%10] -= 1; } for(int i = 0; i < A.length; i++) A[i] = B[i]; //display(A); } /** Use radix sort to sort an integer array * @param array an integer array * @throws ArrayIndexOutOfBoundsException */ public static void radixSort(int [] array) throws ArrayIndexOutOfBoundsException { int m = getMax(array); for(int exp = 1; m/exp > 1; exp *= 10) { countingSort(array, exp); } } /** Display an integer array * @param array an integer array */ public static void display(int [] array) { for(int i = 0; i < array.length; i++) System.out.printf("%5d", array[i]); System.out.println(); } public static void main(String args[]) { int [] array = {329, 457, 657, 839, 436, 20, 5}; radixSort(array); display(array); } }