Source (Plain Text)
#include <stdio.h>
#include <stdlib.h>
void radix (unsigned int a[], int n, unsigned int mask=1<<31) {
int l, r;
while (n > 1 && mask) {
for (l=0, r=n-1;;) {
while (l<=r && !(a[l]&mask)) ++l;
while (l<=r && a[r]&mask) --r;
if (l>=r) break; a[l]^=a[r]; a[r]^=a[l]; a[l]^=a[r];
}
mask>>=1; ++r;
if (r < n-r) {
radix (a, r, mask); a += r; n -= r;
} else {
radix (a+r, n-r, mask); n = r;
}
}
}int main() {
unsigned int A[100];
for (int i=0; i<100; i++) A[i] = rand()%100;
radix (A, 100); for (int i=0; i<100; i++) printf ("%i ", A[i]);
printf ("\n");
return 0;
}