Ich versuche, einen Python-Code für die 3-Wege-Partition zu schreiben, aber ich bekomme einen Indexierungsfehler. Ich habe versucht, es zu beheben, scheint aber nicht erfolgreich zu sein. In meinem Code wähle ich den ersten Eintrag als Pivot und scanne dann von links und von rechts und tausche die Werte wenn nötig. Wenn irgendein Eintrag gleich pivot ist, verschiebe ich ihn entweder an den Anfang oder an das Ende (wo ich einen Fehler erhalte) von a.Python 3-Wege-Partitionierung (Quicksort)
Dies ist mein Code
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
und definiere ich Swap als:
def swap(a, b):
temp=a
a=b
b=temp
wenn ich versuche, diese Funktion ich einen Fehler in Zeile 21, diesen Index außerhalb des zulässigen Bereichs erhalten laufen. Irgendwelche Vorschläge, was hier falsch ist?
Ihre 'swap' Funktion macht nichts. Python übergibt Variablen nicht als Referenz. – khelwood
Danke, ich habe es repariert und jetzt scheint es zu funktionieren! –