归并代码的主要的代码如下所示:
const int N = 1e6+10;
int q[N],tmp[N];
void merge_sort(int q[],int l,int r){
//递归结束返回条件
if(l>=r) return;
//第一步找到区间的中点位置,方便继续划分区间
int mid = l + r >> 1;
//第二步根据找到的mid,进一步调用归并函数划分区间
merge_sort(q,l,mid);
merge_sort(q,mid+1,r);
//第三步,将已经排好序的区间进行合并操作
int i=l,j=mid+1,k=0;
while(i<=mid && j<=r){
if(q[i] <= q[j]) tmp[k++] = q[i++];
else tmp[k++] = q[j++];
}
while(i<=mid) tmp[k++] = q[i++];
while(j<=r) tmp[k++] = q[j++];
//第四步,将临时数组中已经排好序的区间复制到原数组中
for(int i=l,j=0;i<=r;i++,j++)
q[i++] = tmp[j++];
}
在main函数中调用此函数,并给定相应的参数,待排序的数组名称及要排序的区间下标即可。