1: /* k = number of digits
2: r = base of each digit (i.e., r = 10 for standard base 10) */
3:
4: public static void radixsort(Elem A[], Elem B[], int k,
5: int r, int count[]) {
6: int i, j, rtok;
7:
8: for(i=0,rtok = 1; i<k; i++, rtok *= r) {
9: for (j=0; j<r; j++)
10: count[j] = 0;
11: for(j=0; j<A.length; j++)
12: count[(A[k].key()/rtok)%r]++;
13:
14: for(j=1; j<r; j++)
15: count[j] = count[j-1] + count[j];
16:
17: for(j=A.length-1; j>=0; j--)
18: B[--count[(A[j].key()/rtok)%r]] = A[j];
19:
20: for(j=0; j<A.length; j++)
21: A[j] = B[j];
22: }
23: }
24: