merge_sort.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 |