CLRS第4版归并排序终止条件论证问题(习题2.3-2)
归并排序递归终止条件的合理性论证
归并排序(mergeSort)过程第1行的判断条件为
if p >= r,而非if p == r。当mergeSort被调用时若p > r,则子数组A[p:r]为空。请论证:只要初始调用mergeSort(A, 1, n)满足n >= 1,使用if p == r作为判断条件就足以确保不会出现p > r的递归调用。
伪代码(数组下标从1开始,非Python代码)
def mergeSort(arr, p, r): if p >= r: #line 1 return #line 2 q = math.floor((p+r)/2) #line 3 mergeSort(arr, p, q) #line 4 mergeSort(arr, q+1, r) #line 5 #line 6 merge(arr, p, q, r) #line 7
我的解题尝试
对于第4行的递归调用,基于初始条件和q是p与r的中点,p始终小于等于r。但在第5行的调用中,若数组只有单个元素,q+1会导致p > r,我忽略了什么?
补充说明
根据今日评论,将p>=r替换为p==r完全合理。函数内有两个递归调用:第4行以p和q为参数,由于q是p与r的中点(且r >= p),p绝不会大于q;同理,q始终小于r,因此q+1最大等于r。这个逻辑清晰合理,我提出问题时只是状态不佳。
内容的提问来源于stack exchange,提问作者jam
相关产品推荐
相关产品推荐

