合并算法的代码不知道为什么

#include
using namespace std;
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<size; i++) {
a[left++]=b[i];
}
}
void Merge(int a[],int b[],int left,int i,int right)
{
//合并有序数组a[left:i],a[i+1:right]到b,得到新的有序数组b
int a1cout=left, //指向第一个数组开头
a1end=i, //指向第一个数组结尾
a2cout=i+1, //指向第二个数组开头
a2end=right, //指向第二个数组结尾
bcout=0; //指向b中的元素
for(int j=0; j<right-left+1; j++) {
//执行right-left+1次循环,数组
if(a1cout>a1end) {
b[bcout++]=a[a2cout++];
continue;
} //如果第一个数组结束,拷贝第二个数组的元素到b
if(a2cout>a2end) {
b[bcout++]=a[a1cout++];
continue;
} //如果第二个数组结束,拷贝第一个数组的元素到b
if(a[a1cout]<a[a2cout]) {
b[bcout++]=a[a1cout++];
continue;
} //如果两个数组都没结束,比较元素大小,把较小的放入b
else {
b[bcout++]=a[a2cout++];
continue;
}
}
}
void MergeSort(int a[],int left,int right)
{
//对数组a[left:right]进行合并排序
int *b=new int[right-left+1];
if(left<right) {
int i=(left+right)/2;//取中点
MergeSort(a,left,i);//左半边进行合并排序
MergeSort(a,i+1,right);//右半边进行合并排序
Merge(a,b,left,i,right);//左右合并到b中
Copy(a,b,left,right);//从b拷贝回来
}
}
int main()
{
int n=10;
int a[]={5,8,2,9,4,6,3,1,10,7};
MergeSort( a, 0, n-1);
for(int j=0; j<n; j++) {
cout<<" "<<a[j];
}
return 1;
}

想问一下断点设置在46行(如图)这里为什么right变成1了啊,不应该是0吗?

img

因为在执行左边left=0,i=0,right=1时候,进入if判断,但是此时left=0,right=0,不符合,将会退到上一步也就是left=0,right=1,这就是递归