![]() |
Quicksort - theorie
Delphi-Quellcode:
procedure Quick_Sort(var A: array of Integer; iLo, iHi: Integer); var Lo, Hi, Mid, T: Integer; begin Lo := iLo; Hi := iHi; Mid := A[(Lo + Hi) div 2]; repeat while A[Lo] < Mid do Inc(Lo); while A[Hi] > Mid do Dec(Hi); if Lo <= Hi then begin T := A[Lo]; A[Lo] := A[Hi]; A[Hi] := T; Inc(Lo); Dec(Hi); end; until Lo > Hi; if Hi > iLo then Quick_Sort(A, iLo, Hi); if Lo < iHi then Quick_Sort(A, Lo, iHi); end; begin Quick_Sort(A, Low(A), High(A)); end; Ich soll die Zahlen sortieren: 3-7-8-1-[4]-2-6-9-5 Es wird geteilt, ich erhalte Mid=4 - Pivot-Element . Lo=iLo=3 Hi=iHi=5 3 und 5 stehen richtig so bewegen sich die Zeiger. Lo bekam die Zahl 7 ,die groesser als 4 ist. Hi bekam die Zahl 2 ,die kleiner als 4 ist. Die zahlen werden vertauscht: 3-(2)-8-1-[4]-(7)-6-9-5 Lo=8 Hi=4 Und hier liegt das Problem, ich weiss nicht wie es weiter geht: ((( Die Zahlen 4 und 8 sollen getauscht werden: 3-2-[4]-1-(8)-7-6-9-5 Lo=1 Hi=1 So wuerde Lo und Hi den Wert 1 haben und die Sortieren wuerde stoppen. Die Zahl 1 soll aber auf die linke Seite. ))) Ich muss irgendwo einen Fehler gemacht haben. Kann mir jemand sagen wo der Fehler liegt, ob ich alles richtig mache und mir ewentuell Tipps geben? |
AW: Quicksort - theorie
Low(A) und High(A) geben den unteren und oberen Index von Array A zurück - nicht die Werte an diesen Positionen. Damit haben iLo und iHi beim ersten Aufruf auch die Werte 0 und 8 und nicht 3 und 5.
Edit: Die Methode funktioniert übrigens. |
AW: Quicksort - theorie
Zitat:
|
AW: Quicksort - theorie
|
AW: Quicksort - theorie
Zitat:
Nochmal langsam ! Lo=3, Hi=3, A[Lo]=1, A[Hi]=1 also, A[Lo]< Mid => Inc(Lo) , Lo=4, A[Lo]=8 A[Hi]> Mid => Hi=3, A[Hi]=1 Until greift zu, somit wird Quicksort rekursiv aufgerufen... Die Zahlenfolge bleibt: 3-2-[4]-1-(8)-7-6-9-5 also immer noch nicht richtig... Iwas verstehe ich nicht ? Edit: Noch eine Frage? Woher weiss das Programm, dass Lo links und Hi rechts sein soll? |
AW: Quicksort - theorie
Zitat:
|
AW: Quicksort - theorie
Um Quicksort zu verstehen muss man den Algorithmus visuell betrachten.
![]() |
AW: Quicksort - theorie
Zitat:
:shock: . . . . . :thumb: [/OT] |
AW: Quicksort - theorie
Zitat:
Noch eine Frage? Woher weiss das Programm, dass Lo links und Hi rechts sein soll? |
AW: Quicksort - theorie
Zitat:
Zitat:
Wenn es aber um die Sortierung des Arrays gehe, das wird durch die Vergleiche in den beiden while-Schleifen festgelegt. Wenn du die beiden Operatoren umdrehst, wird das Array absteigend sortiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz