Как исправить ошибки «индекс вне диапазона»?Отладка.Замечательно читайте: Как отлаживать небольшие программы (# 1) .Используйте операторы print или лучше отладчик, чтобы остановиться на определенных позициях в вашем коде и проверить, что происходит не так.Я использую Visual Studio для этого.
Красная точка - это точка останова - всякий раз, когда код попадает в красную точку, он останавливает выполнение, и я могу осмотреть вещи, которые мне нравятся.Затем я могу продвинуться по линии.Желтая стрелка показывает, в какой строке я.
VS может прикреплять переменные в качестве наложения на ваш исходный код - см. Небольшие фрагменты справа от изображения.
Список инструментов отладки: https://wiki.python.org/moin/PythonDebuggingTools
Когда ваша программа проходит через VS в третий раз, она достигает def partition(array,pivot):
, она выходит за пределы:
Причина в том, что ваш pivot
содержит value
, а не индекс, необходимый для его замены.
Даже если вы исправите его на:
def partition(array,pivot): # partition
idx = array.index(pivot) # get the index of the value here
array[0],array[idx]=array[idx],array[0] #swap
j=1 # intiatalize
for i in range(1,len(array)):
if array[i]<array[0]:
array[i],array[j-1]=array[j-1],array[i] #Swap the number less than the pivot
j+=1
array[1],array[j]=array[j],array[1] #swap the pivot to its rightful place
return j-1,array #return index of pivot and the partitioned array
При обмене array[1],array[j]=array[j],array[1]
вы сталкиваетесь с другой ошибкой из-за слишком большого j
:
Вам необходимо исправить свои алгоритмы.
HTH