merge_proc.c |
| 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(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 |