Ich versuche Quicksort in Python mit 2 Hauptfunktionen zu implementieren - Partition und Quicksort. Die Partitionsfunktion ist so konzipiert, dass sie 2 Arrays zurückgibt - größer und kleiner als p. danach wird Quicksort auf beiden separat aufgerufen. so funktioniert die quicksort wie folgt aus:Quicksort und Rekursion in Python
def quicksort(array)
pivot = 0 # pivot choice is irrelevant
left,right = partition(array,pivot)
quicksort(left)
quicksoft(right)
return left+right
Aber aus meinem Verständnis sollte es möglich sein Partition zu entwerfen nur einen einzigen Index zurückzukehren - abgrenzt größere und kleinere Arrays und Redesign quicksort wie folgt:
def quicksort(array)
pivot = 0 # pivot choice is irrelevant
i = partition(array,pivot)
quicksort(array[:i-1])
quicksoft(array[i:])
return array
aber diese Implementierung kehrt teilweise sortierten Array
original array [5, 4, 2, 1, 6, 7, 3, 8, 9]
sorted array [3, 4, 2, 1, 5, 7, 6, 8, 9]
was ich hier fehlt?
Sind Sie Ihre neue 'Partition() zuversichtlich' Funktion ändert das Array an Ort und Stelle ? – sarnold
Ich schrieb eine sehr ähnliche Partitionsfunktion http://stackoverflow.com/a/9244923/632088, die Hi - Low - Indizes verwendet, anstatt Listen überall zu kopieren. Hoffe, es könnte helfen –
Als eine allgemeine Regel: Wenn Funktion sein Argument inplace ändert, sollte es 'None' z. B. 'L.Sort() vs sortierte (L)' zurückgeben. – jfs