合并排序“比较中超过最大递归深度”

我想在Python 3中进行代码合并排序。


这是我的代码:


import math


def Merge(array,start,mid,end):

    n1 = mid - start +1

    n2 = end - mid

    i = 0

    j = 0

    left = [None] * n1

    right = [None] * n2

    inv = 0

    for i in range(0,n1):

        left[i] = array[start + i - 1]

    for j in range(0,n2):

        right[j] = array[mid + j]


    left.append(math.inf)

    right.append(math.inf)

    new_list = []

    for k in range(0,end):

        if left[i] <= right[j]:

            array[k] = left[i]

            i+=1

        elif left[i] > right[j]:

            array[k] = right[j]

            j+=1


def MergeSort(array,start,end):

    if len(array) <= 1:

        return array

    mid = math.ceil((start + end)/2)

    MergeSort(array,start,mid)

    MergeSort(array,mid+start,end)

    Merge(array,start,mid,end)



stuff = [1, -5, 17, 32, 6] 

MergeSort(stuff, 0, len(stuff))

print(stuff)

我测试了第一个功能(合并),它可以正常工作。但是我对递归有问题。我不知道问题出在哪里。错误是“比较中超出了最大递归深度”。


凤凰求蛊
浏览 167回答 1
1回答

智慧大石

您没有从退出的功能MergeSort。当您在每次通话中传递整个列表时,列表的长度永远不会改变。如果您从列表中的5个元素开始,则len(array)始终为5。因此,您将转到左侧基本项目(一个元素),并永远永远锤击该元素。尝试检查范围,例如if&nbsp;end&nbsp;-&nbsp;start&nbsp;<=&nbsp;1:这至少将使您了解下一个执行问题。请参阅这个可爱的调试博客以获取帮助。如果没有其他问题,请学习放入有用的print语句以跟踪数据和控制流程。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python