繁体   English   中英

在 Python 中实现堆排序算法在运行时收到递归错误

[英]Implementing heap sort algorithm in Python receiving recursion error when running

我试图实现堆排序算法来对列表进行排序,但收到以下错误代码:RecursionError:超出最大递归深度如果您发现任何问题,请告诉我我将在下面发布我的函数和辅助函数,如下所示:

def heap_sort(A):
    heap_size = _build_max_heap(A)
    for i in range(heap_size // 2, -1):
        A[0], A[i] = A[i],A[0]
        heap_size = heap_size - 1
        _max_heapify(A,heap_size, I)

def _build_max_heap(A):
    heap_size = len(A)
    for i in range(heap_size // 2):
        _max_heapify(A,heap_size, I)
    return heap_size

def _left(I):
    return (2*i)+1

def _right(i):
    return (2*i)+2

def _max_heapify(A, heap_size, i ):
     l = _left(i)
    r = _right(i)
    if l < heap_size and A[i] < A[l]:
        largest = l
    else:
        largest = i
    if r < heap_size and A[largest] < A[r]:
        largest = r
    if largest != i:
       A[i], A[largest] = A[largest], A[i]
    _max_heapify(A,heap_size, largest)

您的问题是由于您的_max_heapify function 递归调用自身,并且它总是调用自身,无论作为参数传递给它什么。 为了使递归起作用,必须有一个条件变为真,使得递归 function 不会调用自身。 您需要修改您的逻辑,以便出现这种情况......以便在某些情况下通过执行不调用自身的_max_heapify来停止递归。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM