Я пытаюсь написать код на Python для 3-way-раздела, однако я получаю ошибку индексации. Я попытался это исправить, но, похоже, не преуспел. В моем коде я выбираю первую запись, которая является точкой опоры, а затем сканирую ее слева и справа, при необходимости меняя значения. Если какая-либо запись равна оси, я либо перемещаю ее в начало, либо в конец (где я получаю сообщение об ошибке).Python 3-way partitioning (Quicksort)
Это мой код
def partition(a, start, end):
left=start+1
right=end
p=start+1
q=end
pivot=a[start]
while True:
while a[left]<pivot:
left+=1
while a[right]>pivot:
right-=1
if right==start+1:
break
if left>=right:
break
swap(a[left], a[right])
if a[left]==pivot:
swap(a[p],a[left])
p+=1
if a[right]==pivot:
swap(a[right], a[q])
q-=1
swap(a[right], a[start])
k=end
while k>=q+1:
swap(a[left+1], a[k])
k-=1
left+=1
k=1
while k<p:
swap(a[k], a[right+1])
k+=1
right-=1
и определяет своп как:
def swap(a, b):
temp=a
a=b
b=temp
, когда я пытаюсь запустить эту функцию, я получаю ошибку в строке 21, что индекс вне диапазона. Какие-либо предложения о том, что здесь не так?
Ваша функция 'swap' ничего не делает. Python не передает переменные по ссылке. – khelwood
Спасибо, я исправил его и теперь он работает! –