繁体   English   中英

我的 python 递归快速排序算法有什么问题?

[英]What is wrong with my python recursive quick sort algorithm?

所以我的算法有两个功能。 第一个是partition ,它将列表的第一个元素作为 pivot 并将所有大于它的元素放在它之后,所有最小的元素放在它之前,我已经对其进行了测试,它工作得很好。 第二个 function quicksort function 它使用partition递归地对整个列表进行排序。 当我在 pycharm 中运行代码时,它说超出了最大递归深度和一些其他错误。 这是代码:

arr = [81, 4, 73, 1, 98, 69, 300, 14, 7, 420, 190, 8, 9]


def partition(low, high):
    lo = low
    hi = high
    pivot = arr[lo]
    while lo < hi:
        while arr[lo] <= pivot:
            lo += 1
        while arr[hi] > pivot:
            hi -= 1
        if hi > lo:
            arr[lo], arr[hi] = arr[hi], arr[lo]
    arr[0], arr[hi] = arr[hi], arr[0]
    return hi


def quicksort(l, h):
    if l < h:
        j = partition(l, h)
        quicksort(l, j)
        quicksort(j + 1, h)


quicksort(0, 12)
print(arr)

PS:我是初学者(只有2个月的python)所以请尽量简单解释。 提前致谢!

您的分区function 有缺陷。 此外,您应该通过传递对列表的引用而不是处理全局变量来使您的函数更加灵活/可重用。 这是我使用 Hoare 算法和 select pivot 的不同方法的实现:

def partition(A, lo, hi):
    pivot = A[(lo+hi)//2]
    i = lo
    j = hi
    while True:
        while A[i] < pivot:
            i += 1
        while A[j] > pivot:
            j -= 1
        if i >= j:
            return j
        A[i], A[j] = A[j], A[i]


def quicksort(A, lo, hi):
    if lo < hi:
        p = partition(A, lo, hi)
        quicksort(A, lo, p)
        quicksort(A, p + 1, hi)

arr = [81, 4, 73, 1, 98, 69, 300, 14, 7, 420, 190, 8, 9]
quicksort(arr, 0, len(arr)-1)
print(arr)

暂无
暂无

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

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