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