You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:33:12