【问题标题】:Python quick sort- recursive error running on terminalPython快速排序-终端上运行的递归错误
【发布时间】:2019-10-08 12:42:20
【问题描述】:

有人知道为什么我的 快速排序 会出现以下递归错误吗?不知道为什么我会收到“RecursionError:比较超出最大递归深度”。我问过其他人,他们说我的递归不应该超过:

代码如下:

def merge(array, low, mid, high):

i,j,k = low,mid+1,low
leftarray = array[low:mid+1]
rightarray = array[mid+1:high+1]

temp= [0]*high

while i<=mid and j<=high:

    if array[i]<array[j]:
        temp[k] = array[i]
        i+=1
    else:
        temp[k] = array[j]
        j+=1
    k+=1

if i>mid:
    temp[k:high+1] = array[j:high+1]
else:
    temp[k:high+1] = array[i:mid+1]  

array[low:high+1] = temp[low:high+1]

还有错误

(base) b98-aruba1-guest-10-110-7-206:desktop ericadamian$ python Quicksort1.py
RecursionError: maximum recursion depth exceeded in comparison
(base) b98-aruba1-guest-10-110-7-206:desktop ericadamian$

【问题讨论】:

  • 递归函数的终止条件是什么?
  • Quicksort1(array, index, low, index + 1) 这是一个无限递归。它将使用相同的 low 和 index 值调用自己。
  • 在第一次递归调用中可能应该是 -1 而不是 +1 - 你的 high 值每次都越来越大,所以 if 语句将永远是 @987654333 @
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 SE 分发内容的不可撤销的权利(即无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何破坏行为都将被撤销。请参阅:How does deleting work? …。如果允许删除,则帖子下方左侧有一个“删除”按钮,但仅在浏览器中,而不是移动应用程序中。

标签: python quicksort


【解决方案1】:

在 cmets 中记录的修复。

def Quicksort1(array, low, high):               #fix

    if high > low:
        index = Partition(array, low, high)     #fix
        Quicksort1(array, low, index - 1)       #fix
        Quicksort1(array, index + 1, high)      #fix

def Partition(array, low, high):                #fix

    firstitem = array[low]
    j = low
    for i in range(low+1, high+1):              #fix
        if array[i] < firstitem:
            j+=1
            array[j], array[i] = array[i], array[j]
    index = j
    array[low], array[index] = array[index], array[low]     
    return index                                #fix

array = [10, 3, 4, 8, 1, 7]
Quicksort1(array, 0, len(array)-1)              #fix
for j in range(len(array)):                     #fix
    print ("%d" %array[j])                      #fix

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 2020-08-14
    • 2021-06-26
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    相关资源
    最近更新 更多