Как кто-то, довольно новый для программирования, я пытаюсь реализовать quicksort в Python. Тем не менее, я пытаюсь реализовать его таким образом, который не кажется наиболее распространенным. Я использую технику, описанную в этом видео, CS50: https://www.youtube.com/watch?v=aQiWF4E8flQIndexError при реализации quicksort CS50 style
Эта версия алгоритма выбирает стержень в конце массива, размещает «стену» в начале и начинает итерирование списка. Когда он находит элемент, который меньше, чем ось, он меняет этот предмет на предмет с правой стороны стены и перемещает стену на одну позицию вправо. Когда все предметы сравниваются с осью опоры, он устанавливает шарнир на стене, а стена перемещается на одну позицию вправо. Это продолжается до тех пор, пока стена не окажется в конце массива.
До сих пор, я пришел с этим:
def quicksort(alist):
quicksort_helper(alist)
print alist
def quicksort_helper(alist):
wall = 0
while wall < (len(alist) - 1):
pivot = len(alist) - 1
for current in range(wall, pivot):
if alist[current] < alist[pivot]:
alist[current], alist[wall] = alist[wall], alist[current]
wall = wall + 1
alist[wall], alist[pivot] = alist[pivot], alist[wall]
wall = wall + 1
Когда я пытаюсь запустить программу, которую я держать возникают проблемы с массивом указателей стены и опоры, так как это сообщение об ошибке I я получаю:
IndexError: list index out of range
Я пробовал много с индексами, но я не могу понять это.
Пожалуйста, убедитесь, что ваш код правильно отформатирован, может быть так же хорошо, что это из-за неправильного отступа –
И предоставить вход для отказа (не то, чтобы алгоритм был правильным, потому что '[4,2,1,1,2] 'сортируется в' [2, 2, 4, 1, 1] '). –
Последний безусловный своп должен быть после цикла 'для текущего ... '. Он вставляет шарнир между двумя разделами. Конечно, текущий код только разделяет. Вы должны применить quicksort к обоим разделам слева и справа к оси. –