從書羅伯特·塞奇威克&凱文·韋恩算法第四版歸併排序基本情況(遞歸)解剖
在遞歸部分基本情況代碼
if(end <= start)
{
return;
}
但我檢查end
永不低於start
索引。只剩下1個元素時發生end = start
。那麼爲什麼<=
少於運營商使用的地方只有一個條件是相等的=
一直工作?
假設採取數組a[8,5,3]
。
現在的中間點是第一個索引,以便鴻溝
後a[8,5] and a[3]
divide(a,0,1) and divide(a,2,2), merge(a,0,1,2)
開始比divide(a,0,1)
結束部分減小,start=end
發生在divide(a,2,2)
函數調用。
現在中旬是第0個指數。
a[8] and a[5]
divide(a,0,0) and divide(a,1,1), merge(a,0,0,1)
與此在函數調用start=end
是唯一的真。
所以從字面上end
從來沒有成爲小於start
從而end<start
永遠不會發生。只有end=start
發生。
任何人都可以解釋我爲什麼我們在合併排序的基本情況下使用<(小於)運算符?
完全遞歸代碼
int divide(int a[], int start, int end)
{
int mid;
if(end<=start)
{
return;
}
else
{
mid = (start+end)/2;
divide(a, start, mid);
divide(a, mid+1, end);
merge(a, start, mid, end);
}
}
你有你的條件,比如'如果(完=開始)'?而不是'if(end == start)'? –
@MuhammadAhmad,thanx mate!是的,如果我寫'(結束==開始)' – michel