void merge(int a[],int temp[],int l,int r,int rightEnd){
leftEnd=r-1;
t=l;
num=rightEnd-l+1;
while(l<=leftEnd && r<=rightEnd){
if(a[l]<=a[r]){
temp[t++]=a[l++];
}else{
temp[t++]=a[r++];
}
}
while(l<=leftEnd){
temp[t++]=a[l++];
}
while(r<=rightEnd){
temp[t++]=a[r++];
}
for(int i=0;i<num;i++,rightEnd--){
a[rightEnd]=temp[rightEnd];
}
}
注意:(1).子列用完一个元素,指针要加1
(2).temp每次多一个元素,指针要加1
(3).当指针大小超过end,循环跳出
(4).循环跳出要么是r>rightEnd要么是l>leftEnd,不可能同时发生,因为两个数大小不一样,先用完的先跳出
(5).当符合l<=leftEnd但是却跳出循环,无疑是r>rightEnd,此时l左子列还有元素,再把他补进去temp,记得指针要移动,要不无限循环
(6).因为t=l,l的位置一直在变化,并且l不一定是从0开始的,因此从头到尾复制是不可能的,而尾部rightEnd一直不变,我们可以从后到头,循环几次呢,循环num次,如何实现,用 int i=0;i<num;i++ 即可实现循环num次