以下归并排序代码参考自《算法竞赛入门经典(第2版)》
void merge_sort(int *a ,int begin,int end){
if(end!=begin){
int mid = (begin+end)/2;
merge_sort(a,begin,mid);
merge_sort(a,mid+1,end);
int *b = new int[end-begin+1];//辅助数组
int t = 0;
int i = begin,j=mid+1;
while(i<mid+1||j<end+1){
if(j>=end+1||a[i]<a[j])b[t++]=a[i++];//包含了后半段已经比较完后前半部分的剩余部分的复制
else b[t++]=a[j++];
}
for(int i = begin;i<=end;i++){//复制回原数组
a[i]=b[i-begin];
}
}
}