Небольшая начальная трассировка показывает проблему:
indent = ""
def quickSort(array, low, high):
global indent
# print(indent, "quickSort ENTER", low, high)
indent += " "
if (low<high):
pivot = help(array, low, high)
print(low, high, pivot)
quickSort(array, low, pivot)
quickSort(array, pivot + 1, high)
indent = indent[2:]
Увидев проблему со стеком, я вставил оператор print, который включает в себя сводную точку.Вывод:
0 5999 0
1 5999 1
2 5999 2
3 5999 3
4 5999 4
5 5999 5
6 5999 6
...
994 5999 994
995 5999 995
996 5999 996
Traceback (most recent call last):
File "so.py", line 79, in <module>
quickSort(copy3, 0, len(copy3)-1)
File "so.py", line 46, in quickSort
quickSort(array, pivot + 1, high)
File "so.py", line 46, in quickSort
quickSort(array, pivot + 1, high)
File "so.py", line 46, in quickSort
quickSort(array, pivot + 1, high)
[Previous line repeated 994 more times]
File "so.py", line 43, in quickSort
pivot = help(array, low, high)
File "so.py", line 28, in help
while(array[fromhigh]>pivot):
RecursionError: maximum recursion depth exceeded in comparison
Ваша проблема в том, что ваша логика сводки всегда возвращает младший элемент, который изменяет ваш алгоритм на O (N ^ 2) , умираякогда N
больше допустимой глубины стека.
Можете ли вы взять его оттуда?Смотрите этот прекрасный debug блог за помощью.
Даже банальный print
даст вам много подсказок.