#define RADIX 256 #define N 16 U8 a[N]; class List { List *next; U8 *a; } l[N], *r[RADIX]; U0 DumpIn() { I64 i; "$RED$\n\nInput$FG$\n"; for (i = 0; i < N; i++) "%d:%d\n", i, a[i]; } U0 DumpOut() { I64 i, j = 0; List *tmpl; "$RED$\n\nOutput$FG$\n"; for (i = 0; i < RADIX; i++) { tmpl = r[i]; while (tmpl) { "%d:%d\n", j++, *tmpl->a; tmpl = tmpl->next; } } } U0 Init() { I64 i; MemSet(r, 0, sizeof(r)); for (i = 0; i < N; i++) { a[i] = RandU16&255; l[i].next = NULL; l[i].a = &a[i]; } } U0 Sort() { I64 i; for (i = 0; i < N; i++) { l[i].next = r[*l[i].a]; r[*l[i].a] = &l[i]; } } U0 RadixSort() { Init; DumpIn; Sort; DumpOut; } RadixSort;