在合并排序的主函数中,每一次需要计算中间值mid=(l+r)/2;然后分别对左半段和右半段进行递归调用,我在实际测试时写错了递归参数导致了栈溢出,如
Sort(int a[],int l,int r)
{
if(l<r)
{
mid=(l+r)/2;
Sort(a,l,mid-1);
Sort(a,mid,r);
}
}
这样递归后会造成栈溢出,比如考虑l=2,r=3的情形,mid=(2+3)/2=2;Sort(a,2,2); Sort(a,2,3);所以Sort(a,2,3)会不断的被调用,从而造成栈溢出,导致程序退出,正常的做法应该是
Sort(int a[],int l,int r)
{
if(l<r)
{
mid=(l+r)/2;
Sort(a,l,mid);
Sort(a,mid+1,r);
}
}