#include <stdio.h> void merge(int *const a,int p,int q, int r); void merge_sort(int a[],int p,int r); int main(void){ int j; int arraynumber[]={3,5,1,2,0,-1,-3,7,9,8}; int len=sizeof(arraynumber)/sizeof(int); merge_sort(arraynumber,0,len-1); for(j=0;j<len;j++) printf("%d\n",arraynumber[j]); return 0; } void merge(int *const a,int p,int q, int r){ int i,j,k,n1,n2,*left,*right; n1=q-p+1; n2=r-q; left=(int *)malloc((n1+1)*sizeof(int)); right=(int *)malloc((n2+1)*sizeof(int)); for(j=0;j<n1;j++) left[j]=a[p+j]; left[j]=10000; for(j=0;j<n2;j++) right[j]=a[q+1+j]; right[j]=10000; i=0;j=0; for(k=p;k<=r;k++){ if(left[i]<=right[j]){ a[k]=left[i]; i++; } else{ a[k]=right[j]; j++; } } free(left); free(right); left=NULL; right=NULL; } void merge_sort(int a[],int p,int r){ int q=0; if(p<r){ q=(p+r)/2; merge_sort(a,p,q); merge_sort(a,q+1,r); merge(a,p,q,r); } }
每周一练,day day up!