#includeusing namespace std; #include void Copy(int a[],int b[],int left,int right) { //将b[0]至b[right-left+1]拷贝到a[left]至a[right] int size=right-left+1; for(int i = 0;i a[left++]=b[i]; // a[1] = b[0],a[2] = b[1]...... } } void Merge(int a[],int b[],int left,int i,int right){ //合并有序数组a[left:i],a[i+1:right]到b,得到新的有序数组b int a1Begin=left, //指向第一个数组开头 a1End=i, //指向第一个数组结尾 a2Begin=i+1, //指向第二个数组开头 a2End=right, //指向第二个数组结尾 bcout=0; //指向b中的元素 for(int j=0; j //执行right-left+1次循环,数组 if(a1Begin>a1End) { b[bcout++]=a[a2Begin++]; continue; } //如果第一个数组结束,拷贝第二个数组的元素到b if(a2Begin>a2End) { b[bcout++]=a[a1Begin++]; continue; } //如果第二个数组结束,拷贝第一个数组的元素到b if(a[a1Begin] b[bcout++]=a[a1Begin++]; continue; } //如果两个数组都没结束,比较元素大小,把较小的放入b else { b[bcout++]=a[a2Begin++]; continue; } } } void MergeSort(int a[],int left,int right){ int *b = new int[right-left+1]; if(left int mid = (right+left)/2; MergeSort(a,left,mid); MergeSort(a,mid+1,right); Merge(a,b,left,mid,right); Copy(a,b,left,right); } }



