Quick sort mit mittlere element als pivot
Mein Verständnis der schnellen Sorte ist
- Wähle ein pivot-element (in diesem Fall wähle ich mittlere element als
pivot) - Initialisieren linken und rechten Zeiger auf Extreme.
- Hier finden Sie das erste element auf der linken Seite des Drehpunktes, die größer ist als das pivot.
- Ebenso finden Sie das erste element auf der rechten Seite des pivot, der kleiner als der pivot -
- Swap-Elemente in 3 und 4.
- Wiederholen 3,4,5, es sei denn, Links >= rechts.
- Wiederholen Sie das ganze für linken und rechten subarray als pivot ist jetzt an seinem Platz.
Ich bin sicher, ich bin hier etwas fehlt, und das sehr dumm. Aber oben scheint nicht zu funktionieren fot dieses array:
8,7,1,2,6,9,10,2,11 pivot: 6 left pointer at 8, right pointer at 11
2,7,1,2,6,9,10,8,11 swapped 2,8 left pointer at 7, right pointer at 10
Was nun ? Es gibt kein element, die kleiner als 6 auf der rechten Seite.
Wie 7 wird zu gehen, um das Recht der 6 ?
InformationsquelleAutor Walt | 2015-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist keine vorab-Aufteilung zwischen der linken und der rechten Seite. Insbesondere 6 ist, nicht die Teilung. Stattdessen ist die division durch verschieben der linken und rechten Zeiger näher an einander, bis Sie sich treffen. Das Ergebnis könnte sein, dass die eine Seite wesentlich kleiner als die anderen.
Ihre Beschreibung des Algorithmus ist in Ordnung. Nirgends es sagen Sie haben zu stoppen in der Mitte element. Einfach weiter, die führen das als gegeben an.
BTW.: Das pivot-element kann verschoben werden, während die Sortierung. Nur weiter zu vergleichen, gegen 6 auch wenn es verschoben wurde.
Update:
Tatsächlich gibt es ein paar kleine problem in der Beschreibung des Algorithmus. Einer ist, dass Sie entweder Schritt 3 oder Schritt 4, müssen Elemente, die gleich auf die pivot. Wir umschreiben es wie folgt:
Mein Verständnis der schnellen Sorte ist
kleiner als pivot-Wert
warten zu hören, wieder von Ihnen. 🙂
scheint mein update
Meine einzige Sorge (die nicht wirklich gültig, glaube ich) ist, haben wir angefangen, mit 6 als Drehpunkt aber endlich array habe neu geordnet, so daß alle Elemente, die kleiner als 7 sind vor 7 und größer als 7 sind nach 7. Idealerweise sollten wir dies erreicht haben, für 6.
Nach Ihren 4. Punkt, wie haben Sie Weg Vergangenheit durch
6
in Ihrer trocken-ausführen von code beileft pointer moves to 7, right pointer moves to 2
? Nach der 4. Regel, es sollte aufhören, an6
als6 > 6
ist falsch. Wie bist du gegangen, vorbei an der6
und ausgewählten2
? Oder bin ich etwas fehlt?InformationsquelleAutor Codo
Endlich Sie bekommt ein sortiertes array.
InformationsquelleAutor Kush