在合併排序的主函數中,每一次需要計算中間值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);
}
}