合并排序中分段递归问题

在合并排序的主函数中,每一次需要计算中间值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);

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章