merge_sort.c
contents ::
  address.c
  atquick_sort.c
  bits.c
  countspace.c
  ctof.c
  hextoint.c
  hist.c
  indexof.c
  itob.c
  linkage.c
  lzw.c
  maxval.c
  merge.c
  merge_sort.c
  peof.c
  pointer.c
  quick2.c
  quick.c
  quick_sort.c
  reverse.c
  rftoc.c
  rmultiblank.c
  rtabs.c
  squeeze.c
  structoo.c
  syscall.c
  tempfunc.c
  tfc.c
  word.c


void merge_sort(int a[], int p, int r){
  if(p<r){
    int i;
    int q=(p+r)/2;
    merge_sort(a, p, q);
    merge_sort(a, q+1, r);
  /*    merge(a, p, q, r);  */
    if(p==q){
      if(a[p]>a[r]){
         int i;
         i=a[p];
         a[p]=a[r];
         a[r]=i;
      }
    }else {
      int i;
      int length = r-p+1;
      int newa[length];
      int s = p;
      int j = q+1;
      for(i=0;s<q+1;i++){
         if( j>r || a[s] <= a[j]) {
           newa[i]=a[s++];
         }else  if(a[s] >a[j]) {
           newa[i]=a[j++];
         }
         
      }
      while(j<=r){
         newa[i++]=a[j++];
      }
      for(i=0;i<length;i++,p++){
         a[p]=newa[i];
      }
    }
  }
}

James Little