为什么QuickSort的这种实现不起作用?

时间:2019-05-25 19:25:43

标签: python sorting recursion quicksort

我试图将Quicksort代码从Java转换为Python,但是没有用。有人可以告诉我问题出在哪里吗?我得到的是“比较中超过了最大递归深度”,但是对于我的示例,我只想订购少于10个整数,所以我不认为这是真正的问题...

def help(array, low, high):
    pivot = array[low]
    fromhigh = high
    fromlow = low
    while True:
        while(array[fromhigh]>pivot):
            fromhigh = fromhigh-1
        while(array[fromlow]<pivot):
            fromlow = fromlow+1
        if(fromlow<fromhigh):
            array[fromlow], array[fromhigh] = array[fromhigh], array[fromlow]
        else:
            return fromhigh


def quickSort(array, low, high):
   if (low<=high):
       pivot = help(array, low, high)
       quickSort(array, low, pivot)
       quickSort(array, pivot + 1, high)


#Testarray
array = [10, 7, 2 , 8, 9, 1, 5, 11, 13]
n = len(array)
quickSort(array, 0, n-1)
print("Sorted Array:")
for i in range(n):
    print("%d" % array[i]),

1 个答案:

答案 0 :(得分:1)

如果您在print(low, high)函数的开头添加一个quickSort,您会注意到它一直打印0 0直到崩溃。

那里的if条件不正确。而不是low <= high应该是low < high,因为您不想继续对单元素子数组进行排序。