0
我想寫一個3路分區的Python代碼,但是我得到一個索引錯誤。我試圖修復它,但似乎沒有成功。在我的代碼中,我選擇第一個條目作爲數據透視表,然後從左側和右側進行掃描,根據需要交換數值。如果任何條目等於pivot,我將它移動到開始或結束(我得到一個錯誤)的一個。Python 3路分區(快速排序)
這是我的代碼
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
謝謝,我修好了,現在它似乎工作! –