ich hab jetzt das Sortierverfahren "Quicksort" programmiert. Nur leider wird die Liste erst beim zweiten Aufruf der Prozedur sortiert. Beim ersten Aufruf wird die unsortierte
Liste ausgegeben. Woran könnt das liegen?
Code: Alles auswählen
procedure quicksort ( anfang, ende : integer; feld : tstrings);
var
i, k : integer;
begin
i:=anfang;
k:=ende;
if anfang<ende then
begin
while i<k do
begin
try //Beides Zahlen
strtoint (feld[i]);
strtoint (feld[i+1]);
if strtoint (feld[i+1])<strtoint (feld[i])then
begin
feld.Exchange(i, i+1);
i:=i+1;
end
else
begin
feld.Exchange(i+1, k);
k:=k-1;
end;
except try //Nur feld[ind+1] ist eine Zahl
strtoint (feld[i+1]);
feld.Exchange(i, i+1);
i:=i+1;
except try //Nur feld[ind] ist eine Zahl
strtoint (feld[i]);
i:=i+1;
except //Beides sind keine Zahlen
if feld[i+1]<feld[i]then
begin
feld.Exchange(i, i+1);
i:=i+1;
end
else
begin
feld.Exchange(i+1, k);
k:=k-1;
end;
end;
end;
end;
end;
quicksort (anfang,i-1, feld);
quicksort (i+1, ende, feld);
end;
end;
Code: Alles auswählen
if CQuick.Checked=true then //Aufruf Quicksort
begin
anfang:=0;
ende:=memo5.Lines.Count-1;
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(startTime);
memo5.Clear;
memo5.lines.AddStrings(memo1.Lines);
quicksort(anfang, ende, memo5.lines);
QueryPerformanceCounter(endTime);
edit4.Text:=(IntToStr((endTime - startTime) * 1000 div freq));
end
else
begin
memo5.Clear;
edit4.Clear;
end;