#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;