Darf es auch die rekursive Variante sein, die finde ich übersichtlicher. Die Stellen mit Operatoren, die für aufsteigend/absteigend gedreht werden müssen, beschränkt sich da auf zwei Stück
Delphi-Quellcode:
procedure QuickSort(
var A:
array of Integer);
procedure QSort(LoIndex, HiIndex: Integer);
var
Lo, Hi: Integer;
Pivot: Integer;
Swap: Integer;
begin
Pivot := A[(LoIndex + HiIndex)
div 2];
Lo := LoIndex;
Hi := HiIndex;
repeat
while A[Lo] < Pivot
do Inc(Lo);
// Hier Operator drehen
while A[Hi] > Pivot
do Dec(Hi);
// Hier auch
if Lo <= Hi
then
begin
if Lo < Hi
then
begin
Swap := A[Lo];
A[Lo] := A[Hi];
A[Hi] := Swap;
end;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if LoIndex < Hi
then QSort(LoIndex, Hi);
if Lo < HiIndex
then QSort(Lo, HiIndex);
end;
begin
QSort(Low(A), High(A));
end;
Ansonsten:
bei Deiner Version müsstest Du prüfen, ob Du (zum original Code) die Operatoren auch nur dort gedreht hast, wo Werte verglichen werden. Dort wo der Index verglichen wird, muss der Operator gleich bleiben.