#include "stdafx.h" #include <iostream> //合并 void MERGE(int a[],size_t beg,size_t mid,size_t en) { size_t lenl=mid-beg+1; size_t lenr=en-mid; int* L=(int*)malloc(sizeof(int)*lenl); int* R=(int*)malloc(sizeof(int)*lenr); int i=0,j=beg; while(i<lenl) L[i++]=a[j++]; i=0,j=mid+1; while(i<lenr) R[i++]=a[j++]; i=j=0; int k=beg; while(i<lenl&&j<lenr) { if (L[i]<=R[j]) a[k++]=L[i++]; else a[k++]=R[j++]; } while(i<lenl) a[k++]=L[i++]; while(j<lenr) a[k++]=R[j++]; } void MERGESort(int a[],size_t beg,size_t en) { if (beg<en) { size_t mid=(beg+en)/2; MERGESort(a,beg,mid); MERGESort(a,mid+1,en); MERGE(a,beg,mid,en); } }