Procedure TWortListe.Quick;
//verbessert?
begin
//ich denk mal die sind globale Zähler oder Felder, die hier zurückgesetzt werden
Vergleiche :=0;
Swaps :=0;
//PegelStart ist eine Prozedur, deren Implementierung du nicht gepostet hast, siehe Anmerkung zu Pegel
PegelStart(round(Listenlaenge*log2(Listenlaenge)));
//erster Parameter: "untere" sortierte Grenze, zweiter: "obere" sortierte Grenze
//die anderen zwei Parameter zählen wohl die Vergleiche und Tauschoperationen mit (starten hier mit 0)
quicksort(1,Listenlaenge,vergleiche,swaps);
end;
Procedure TWortListe.Quicksort(anfang, ende: Cardinal;
var act, sw : Cardinal);
var
linkerzeiger, rechterzeiger : Cardinal;
//imho recht sinnlose lokale Kopien der Parameter
//Hybrid666: Denke ich nicht, werden im quelltext inkrementiert und dekrementiert
// Die werte anfang und ende werden auch wieder verwendet (sollen also nicht
// verändert werden)
mitte :
string;
begin
linkerzeiger := anfang;
rechterzeiger := ende;
//auch wieder irgendwas mit ner Anzeige, die die Mitte, des Sortierbereichs zeigt?
//Hybrid666: Pivot-Element (siehe Wikipedia)
mitte := Kollektion[(linkerzeiger+rechterzeiger)div2];
Pegel.Position := Vergleiche;
//Hier taucht der Pegel nochmal auf - vielleicht eine Progessbar o.ä.?
// Hybrid666: Denke auch, auf jedenfall wirds ne ausgabe sein, wieviele vergleiche gemacht wurden
while(Kollektion[linkerzeiger]<mitte)
do //warum zum Henker ein Stringvergleich?
//Hybrid666: SUchen nach einem Element was auf die andere hälfte der
// liste soll
begin
linkerzeiger := linkerzeiger+1;
//Was ist act - Act ist ein var Parameter der Funktion - aus deinem oberen Aufruf raus zu schließen die Tauschanzahl
inc(act);
end;
while(Kollektion[rechterzeiger]>mitte)
do //siehe Schleife davor
//Hybrid666: Tauschpartner im rechten teil für linken teil suchen
begin
rechterzeiger := rechterzeiger-1;
inc(act);
//Hier habe ich nochmal das selbe Problem
end;
if linkerzeiger <= rechterzeiger
then //joa, der restliche Quicksort halt
begin
//ahh weil du eine Art Stringliste sortierst, damit ist dann auch Mitte klar (Privotelement)
Tauschen(Kollektion[linkerzeiger],Kollektion[rechterzeiger]);
linkerzeiger := linkerzeiger + 1;
rechterzeiger := rechterzeiger - 1;
inc(Swaps);
inc(act);
end;
(*if*)
until rechterzeiger < linkerzeiger;
//kompiliert das, so ohne Repeat?
if anfang < rechterzeiger
then
quicksort(anfang, rechterzeiger, Vergleiche, swaps);
//Hier habe ich wieder ein PRoblem mit dem Aufruf Quciksort
//Hybrid666: Rekursiver aufruf um die 2 erhaltenen Teillisten zu sortieren (hier die eine seite)
if linkerzeiger < ende
then
quicksort(linkerzeiger,ende,Vergleiche,swaps);
//Klammer = deine Parameter beim Aufruf, wie oben halt
//Hybrid666: Hier der aufruf für die andere seite
end;
(*quicksort*)