Я реализовал алгоритм быстрой сортировки на практике Python, вот мой код:Quicksort максимальная глубина рекурсии превысила
def sort(array):
if len(array) > 1:
pivot = array[0]
left = []
right = []
equal = []
for x in array:
if x < pivot:
left.append(x)
elif x == pivot:
equal.append(x)
else:
right.append(x)
return sort(left)+equal+sort(right)
return array
Теперь, алгоритм работает нормально, но если я удалить equal
список и сделать свой цикл, как это:
for x in array:
if x < pivot:
left.append(x)
else:
right.append(x)
return sort(left) + sort(right)
Я получаю максимальную ошибку глубины рекурсии при попытке отсортировать right
список. Дело не в том, что этот список также содержит равные элементы, я тестировал его с очень маленькими списками. Я чувствую, что это будет какая-то действительно глупая ошибка с моей стороны, но мне не повезло найти ее до сих пор.
Почему вы думаете, что вы не нуждаетесь в 'equal' список? –
Я собирался с интуицией, что это сделает код немного чище и проще. Решение @ lvc с pop (0) - это то, что я должен был сделать для этого подхода, но, с другой стороны, сохранение «равного» списка - лучшая практика, потому что мне не придется сортировать все, что было бы в этом списке. – npace