合併排序中分段遞歸問題

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

}

}


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