从书罗伯特·塞奇威克&凯文·韦恩算法第四版归并排序基本情况(递归)解剖
在递归部分基本情况代码
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