Почему эта реализация QuickSort не работает? - PullRequest
1 голос
/ 25 мая 2019

Я пытался перевести код 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 Ответ

1 голос
/ 25 мая 2019

Если вы добавите print(low, high) в начале вашей функции quickSort, вы заметите, что она печатает 0 0 все время до ее сбоя.

Имеется условие ifневерен.Вместо low <= high это должно быть low < high, потому что вы не хотите продолжать сортировку одноэлементного подмассива.

...