merge_sort.c
contents ::
  merge.c
  merge_modified.c
  merge_proc.c
  merge_sort.c
  merge_sort_s.s

extern int insert;

void merge_sort(int *newa, int *a, int n){
  //  if(n>0){
  //  int i;
  //  int q=(n)/2;
  //  merge_sort(newa, a, q);
  //  merge_sort(newa, a+q+1, n-q-1);

    /*    merge(a, p, q, r);  */

    if(n<=insert){
      /* Insertion sort procedure */
      int guide=0;
      int i;
      int value;
      int j;
      
      for (i=0; i<=n; i++){
         value = a[i];
         
         if(a[i]<guide){
           for(j=i-1; j >=0 && a[j] > value; j--){
             a[j+1]=a[j];
           }
           a[j+1]=value;
         }
         if (value>guide) guide=value;
         /* End Insertion Sort procedure */
      }
    }else{
      //int i;
      int q=n/2;
      merge_sort(newa,a,q);
      merge_sort(newa,a+q+1,n-q-1);

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

James Little