Procedure Quicksort(Var Data: Tarr);
Procedure Quick(li, re: integer); //Procedure Quick
Var
l, r, h, p: Integer;
Begin
If Li < Re Then Begin
p := Data[Trunc((li + re) / 2)]; // Auslesen des Pivo Elementes bei der Hälfte
l := Li; // Teillisten werden Variablen zugeordnet
r := re;
While l < r Do Begin // kleine Werte nach links, große Werte nach rechts
While data[l] < p Do // linke Teilliste
inc(l);
While data[r] > p Do // rechte Teilliste
dec(r);
If L <= R Then Begin // Teillisten werden "alten" Speicherplätzen zugeordet und die
h := data[l]; // Schleife wird neu durchlaufen -> die Teillisten werden wieder
data[l] := Data[r]; // geteilt
data[r] := h;
inc(l);
dec(r);
End;
End;
If Form1.checkbox1.checked Then Begin // Schritte werden gezählt -> Vorgang wird der Anzahl der
drawarray(data); // Elemente angepasst
form1.Memo1.lines[form1.memo1.lines.count - 1] :=
form1.Memo1.lines[form1.memo1.lines.count - 1] + ' Pivot = ' + inttostr(p);
End;
quick(li, r); // Prozedur "Quick" wird angewendet
quick(l, re);
End;
End;
Begin
If form1.checkbox1.Checked Then Begin
form1.memo1.clear; //Ausgabe
drawarray(Data);
form1.memo1.lines[0] := form1.memo1.lineS[0] + ' Original Folge.';
End;
Quick(0, high(data)); //Prozedur Quick wird aufgerufen
End;