#include <stdlib.h> void mergeSort(int *,int); static void msort(int *,int*,int,int); static void merge(int *,int *,int,int,int);
void mergeSort(int *s,int n){ int incr,*d; d=(int *)malloc(sizeof(int)*n); incr=1; while(incr<n){ msort(s,d,incr,n); incr<<=1;; msort(d,s,incr,n); incr<<=1; } }
static void msort(int *s,int *d,int incr,int n){ int i; for(i=0;i<=n-2*incr;i+=2*incr) merge(s,d,i,i+incr-1,i+2*incr-1); if(i+incr<n) merge(s,d,i,i+incr-1,n-1); else for(;i<n;i++) d[i]=s[i]; }
static void merge(int *s,int *d,int i,int m,int j){ int t,k; for(t=m+1,k=i;i<=m && t<=j;k++) if(s[i]<s[t]) d[k]=s[i++]; else d[k]=s[t++]; while(i<=j) d[k++]=s[i++]; while(t<=j) d[k++]=s[t++]; }
|