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

递归拆分数组时仅左半部分被打印,求问题原因

问题分析与修复方案

核心错误原因

递归调用时传入的索引参数完全错误,子数组的索引范围应该基于自身的长度,而非原数组的索引值。

  • 当你将切片后的firstHalf传入递归时,它是一个独立的新数组,有效索引范围是0到len(firstHalf),但你传了原数组的left和mid,这会导致后续递归中left >= right,直接跳过拆分逻辑。
  • 同理,secondHalf递归时传入的mid+1和right是原数组的索引,和子数组自身的长度不匹配,递归条件left < right永远不成立,所以右半部分的拆分流程完全没执行。

修复后的代码

def mergeSort(array1, left, right):
    if left < right:
        mid = (left + right) // 2
        firstHalf = array1[left:mid]
        secondHalf = array1[mid:right]
        
        print("firstHalf is : ")
        print(firstHalf)
        print("secondHalf is")
        print(secondHalf)
        
        # 递归子数组时,使用子数组自身的索引范围:0到自身长度
        mergeSort(firstHalf, 0, len(firstHalf))
        mergeSort(secondHalf, 0, len(secondHalf))


nums1 = [11, 25, 13, 44, 57, 69, 17, 8, 19, 120]
low = 0
high = len(nums1)
mergeSort(nums1, low, high)

额外优化点

原代码中secondHalf = array1[mid : right] + []的+ []是多余操作,切片array1[mid:right]本身就会生成新数组,直接去掉即可。

修复后效果

运行修复后的代码,会看到右半部分[69, 17, 8, 19, 120]的拆分过程也会被正常打印出来,完整展示整个递归拆分流程。

内容的提问来源于stack exchange,提问作者TechSelfLearner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:09:24