Ich hab hier einen Quicksort, der eigentlich abwärts sortieren soll (also größten zahlen oben/kleinster Index und kleinsten unten/größter Index). Nun treten in der Ausgabe entweder wiederholt die selben zahlen auf oder wiederholt 0. Ich hab keine Ahnung warum.
Delphi-Quellcode:
Procedure TForm1.QuickSort(Anf,Ende:integer);
var i, j, p, q, k: Integer;
tausch: integer;
{für Dreieckstausch}
v: integer;
Begin
i:= Anf-1;
p:= Anf-1;
j:= Ende;
q:= Ende;
v:= Zahlen[Ende];
Repeat
inc( i );
//inc~um 1 erhöhen
While (Zahlen[i] > v)
Do
Begin
inc( i );
End;
dec( j );
//dec~ um 1 vermindern
While (v > Zahlen[j])
Do
Begin
dec( j );
If (j < Anf)
Then Break;
//Break~Verlasse die Schleife
End;
If (i >= j)
Then Break;
Zahlen[i]:=tausch;
//Dreieckstausch
Zahlen[i]:=Zahlen[j];
Zahlen[j]:=tausch;
If (Zahlen[i] = v)
Then
Begin
inc( p );
Zahlen[i]:=tausch;
Zahlen[i]:=Zahlen[p];
Zahlen[p]:=tausch;
End;
If (Zahlen[j] = v)
Then
Begin
dec( q );
Zahlen[q]:=tausch;
Zahlen[q]:=Zahlen[j];
Zahlen[j]:=tausch;
End;
until (j < i);
Zahlen[i]:=tausch;
Zahlen[i]:=Zahlen[Ende];
Zahlen[Ende]:=tausch;
j:= i-1;
inc( i );
k:= Anf;
While (k < p)
Do
Begin
inc( k );
dec( j );
Zahlen[k]:=tausch;
Zahlen[k]:=Zahlen[j];
Zahlen[j]:=tausch;
End;
k:= Ende-1;
While (k > q)
Do
Begin
dec( k );
inc( i );
Zahlen[i]:=tausch;
Zahlen[i]:=Zahlen[k];
Zahlen[k]:=tausch;
End;
QuickSort( Anf, j);
//Aufspaltung 2 Teilmengen
QuickSort( i, Ende);
End;
Bin für jeden Hinweis dankbar