#include "batcher.h"

int aux[1024];

shuffle(int a[], int l, int r)
  { int i, j, m = (l+r)/2;
    for (i = l, j = 0; i <= r; i+=2, j++)
      { aux[i] = a[l+j]; aux[i+1] = a[m+1+j]; }
    for (i = l; i <= r; i++) a[i] = aux[i];
  }
unshuffle(int a[], int l, int r)
  { int i, j, m = (l+r)/2;
    for (i = l, j = 0; i <= r; i+=2, j++)
      { aux[l+j] = a[i]; aux[m+1+j] = a[i+1]; }
    for (i = l; i <= r; i++) a[i] = aux[i];
  }
mergeTD(int a[], int l, int r)
  { int i, m = (l+r)/2;
    if (r == l+1) compexch(l, r);
    if (r < l+2) return;
    unshuffle(a, l, r);
    mergeTD(a, l, m); 
    mergeTD(a, m+1, r);
    shuffle(a, l, r);
    for (i = l+1; i < r; i+=2) 
      compexch(i, i+1);
  }
void mergesort(int a[], int l, int r)
  {
    if (r > l)
      { int m = (r+l)/2;
        mergesort(a, l, m);  
        mergesort(a, m+1, r);
        mergeTD(a, l, r);
      }
  }

