快速排序python实现在左分区没有附加条件的情况下失败

2024-04-20 13:03:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用python编写一个quicksort的实现(这里有很多可用的实现,但是我的目标是自己尝试而不复制/粘贴,只是练习从伪代码到真实代码)。你知道吗

test = [21, 4, 1, 3, 9, 20, 25, 6, 21, 14]

def partition(arr, istart, pivot):
    while pivot > istart :
        if arr[pivot] <= arr[istart]:
            arr[istart], arr[pivot - 1], arr[pivot] = arr[pivot - 1], arr[pivot], arr[istart]
            pivot -= 1
        else:
            istart +=  1

    if (pivot + 1 < len(arr) - 1): # right partition
        partition(arr, pivot + 1, len(arr) - 1 )

    if (pivot - 1  > 0)  and (pivot < len(arr) - 1) : #left partition
        partition(arr, 0, pivot -1)

    return arr    


def quicksort(arr):
    if len(arr) < 2:
        return arr
    else:
        return partition(arr, 0, len(arr) - 1)

对于左分区,我必须添加一个条件(pivot < len(arr) - 1)才能使代码正常工作,否则会出现以下错误:RecursionError: maximum recursion depth exceeded in comparison。 我不明白为什么我需要额外的条件:左边分区的枢轴应该随着左边越来越多的元素被排序而减少。那么,为什么我需要这个条件?你知道吗


Tags: 代码目标lenreturnif粘贴def条件