QuickSort返回递归深度错误

时间:2012-11-14 17:57:45

标签: python algorithm quicksort

我应该是一个简单的快速排序实现,但它返回一个超出递归深度错误,我正在一个少于30个元素的列表上测试它。此外,我的实现是在几天前制作的10,000个列表,我唯一改变的是将它从一个类转移到一个全局函数。有谁看到可能导致这种情况的原因?

def quickSort(m, left, right):
    if len(m[left:right]) <= 1:
        return m
    pivot = m[left]
    i = left + 1
    j = left + 1
    for j in range(j, right):
        if m[j] <= pivot:
            m[j], m[i] = m[i], m[j]
            i += 1
    m[left], m[i-1] = m[i-1], m[left]
    m = quickSort(m, left, i)
    m = quickSort(m, i, right)
    return m

1 个答案:

答案 0 :(得分:2)

你的一个递归调用导致异常(正如你可能已经猜到的那样:-),还要注意你对列表进行排序,这样就不需要返回列表了

def quickSort(m, left, right):
    if right - left  <= 1:
        return

    pivot = m[left]
    i = left + 1 
    j = left + 1 
    for j in range(j, right):
        if m[j] <= pivot:
            m[j], m[i] = m[i], m[j]
            i += 1
    m[left], m[i-1] = m[i-1], m[left]
    quickSort(m, left, i-1)
    quickSort(m, i, right)