void Merge2(int *b,int *c,int *a,int Nb,int Nc) { int i=0,j=0,k=0; while(i<Nb && j<Nc) { if (b[i]<c[j]) a[k++]=b[i++]; else a[k++]=c[j++]; } if (i==Nb) { while(j<Nc) a[k++]=c[j++]; } else{ while(i<Nb) a[k++]=b[i++]; } } void MergeSort2(int *a ,int size) { if (size>1) { int mid=size/2; int j=0,k=0; int *b=(int *)malloc(sizeof(int)*mid); int *c =(int *)malloc(sizeof(int)*(size-mid)); while(j<=mid-1) { b[j]=a[j]; //复制数组到b c[k++]=a[j+mid]; //复制数组到c j++; } if (j<=size-1) //处理为复制完的元素 { c[k]=a[j+mid]; } MergeSort2(b,mid); MergeSort2(c,size-mid); Merge2(b,c,a,mid,size-mid); free(b); free(c); } }