#include <stdio.h>int main(){ int arr[]={9,7,5,8,4,1,3,2,6}; int i; void merge_sort(int vec1[],int vec2[],int size1,int size2); void recursive_merge(int arr[],int size); recursive_merge(arr,sizeof(arr)/sizeof(int)); for(i=0;i<sizeof(arr)/sizeof(int);i++) printf("%d\n",*(arr+i)); getchar(); return 0;}void merge_sort(int vec1[],int vec2[],int size1,int size2){ int i=0,j=0,k=0; int *pvec= (int*) malloc(size1+size2); while(1) { *(pvec+k++)=vec1[i]<=vec2[j]?vec1[i++]:vec2[j++]; if(i==size1) { while(j<size2) *(pvec+k++)=vec2[j++]; break; } else if(j==size2) { while(i<size1) *(pvec+k++)=vec1[i++]; break; } } for(i=0;i<size1;i++) vec1[i]=*(pvec+i); for(i=0;i<size2;i++) vec2[i]=*(pvec+i+size1);}void recursive_merge(int arr[],int size){ int IsEven=size%2==0?1:0; if(size>1) { recursive_merge(arr,IsEven?size/2:(size+1)/2); recursive_merge(&arr[IsEven?size/2:(size+1)/2],IsEven?size/2:(size+1)/2-1); merge_sort(arr,&arr[IsEven?size/2:(size+1)/2],IsEven?size/2:(size+1)/2,IsEven?size/2:(size+1)/2-1); }}

评论