参考了<算法导论>第二版的说明,使用vc6编译调试通过 #include<stdio.h> #include<stdlib.h> #include<math.h> int get_middle(int s,int e) { return (int)floor((s + e )/2); } void merge_sort(int arr[],int start,int end) { int middle=get_middle(start,end); int l_length=middle - start +1,r_length=end - middle; int i=0,j=0, k=start; int *l_arr,*r_arr; int tmp; if(end <= start) { } else if(end - start==1) { if(arr[end]<arr[start]) { tmp=arr[start]; arr[start]=arr[end]; arr[end]=tmp; } } else { merge_sort(arr,start,middle); merge_sort(arr,middle+1,end); l_arr = (int *)malloc((l_length) * sizeof(int)); r_arr= (int *)malloc((r_length) * sizeof(int)); for(i=0;i<l_length;i++) { l_arr[i]=arr[start+i]; } for(j=0;j < r_length;j++) { r_arr[j]=arr[middle+1+j]; } i=0; j=0; for(k=start;k<=end;k++) { if(i>=l_length) { arr[k]=r_arr[j++]; break; } if(j>=r_length) { arr[k]=l_arr[i++]; break; } if( l_arr[i]<r_arr[j]) { arr[k]=l_arr[i++]; } else { arr[k]=r_arr[j++]; } } } } void main() { int arr[8]={2,4,5,7,1,2,3,6}; int i=0,start=0,end=7; merge_sort(arr,start,end); for(i=0;i<8;i++) { printf("%d/n",arr[i]); } }