#include "Item.h"          /* IE */
#include "Array.h"         /* IE */
#define maxN 10000
#define M 4
int IEtrace = 1;
Item aux[maxN];

/* include code */
#define bin(A) l+count[A]
void radixMSD(Item a[], int l, int r, int w)
  { int i, j, count[R+1]; 
    if (w > bytesword) return;
    if (r-l <= M) { insertion(a, l, r); return; }
if (IEtrace) printf("%d %d %d\n", l, r, w);
if (IEtrace) show(a, l, r);
    for (j = 0; j < R; j++) count[j] = 0;
    for (i = l; i <= r; i++) 
      count[digit(a[i], w) + 1]++;
    for (j = 1; j < R; j++) 
      count[j] += count[j-1];
    for (i = l; i <= r; i++) 
      aux[l+count[digit(a[i], w)]++] = a[i];
    for (i = l; i <= r; i++) a[i] = aux[i];
    radixMSD(a, l, bin(0)-1, w+1);
    for (j = 0; j < R-1; j++)
      radixMSD(a, bin(j), bin(j+1)-1, w+1);
  }
/* end code */

void sort(Item a[], int l, int r)
  { 
    radixMSD(a, l, r, 0);
  }

