Delphi Shellsort - Zahlen sortieren

Hallo,

ich bin gerade dabei mit Delphi Zufallszahlen in Listboxen mithilfe von Shellsort zu ordnen.
Ich habe festgestellt, dass wenn ich z.B. 5 Zahlen sortieren möchte, er nur die letzten 4 sortiert. Die erste bleibt aber unverändert auf ihrem Platz. Woran könnte das liegen?
Mit inbegriffen ist noch eine Zeitmessung.

procedure Tform1.ShellSort(Sender: TObject);
var Abstand, i, j, Merke:integer;
Done :boolean;
Ende, Anfang :real;

begin
Anfang:=Time;

Abstand:=n;

while (Abstand>1) do
begin
Abstand:=Abstand div 2;
repeat
Done:=True;
for j:= 1 to n-Abstand do
begin
i:=j+Abstand;
if (Zahl[j]>Zahl[i]) then
begin
Merke:=Zahl[j];
Zahl[j]:=Zahl[i];
Zahl[i]:=Merke;
Done:=False
end;

begin
listbox2.Items.Clear;
for i:=0 to n-1 do

begin
listbox2.items.add(inttostr(Zahl[i]));
end;
Ende:=Time;

end;
end;
until Done;
end;

Ende:=Time;
Edit1.Text:=FloatToStrF((Ende-Anfang)*24*3600,ffFixed, 10,5);

end;

Hallo,
ich habe jetzt deinen Quelltext nicht weiter analysiert.
Solche Probleme treten oft auf, wenn man falsche
Deklarationen macht oder Schleifenvariablen falsch setzt.
Z.B. Arrays fangen oft bei 0 an aber Schleifen
startet man gerne mit 1.

Wenn du Quelltext einstellst, benutze doch bitte
den pre-tag. Dann werden die Einzüge nicht versaut.
Sonst ist es ein Elend, das zu verfolgen.

Die Fehler in seinem eigenen Quelltext zu finden, ist
die Hauptarbeit jedes Programmierers.
Das ist das sogenannte „Debuggen“.

Ein paar Hinweise dazu:
Setze einen Breakpoint an den Anfang deiner Schleife
und gehe schrittweise durch (Taste ).
Lasse dir, während du schrittweise die Sortierschleifen
durchläufst, die Variablen anzeigen.
Dazu kannst du in der „Liste der überwachten Ausdrücke“
Variablen eintragen aber auch während er Abarbeitung
Variablen anzeigen lassen, indem du mit dem Mauszeiger
drauf gehst.
Alternativ kannst du auch Testausgaben machen, die dir
die Zwischenwerte darstellen. Wenn das Problem gelöst
ist, dann löschst du diese wieder oder kommentierst
sie aus, falls du sie noch mal verwenden möchtest.

Es ist auch guter Stil, wenn man seinen Quelltext so
kommentiert, das er quasi selbsterklärend wird.
Gruß Uwi

ich bin gerade dabei mit Delphi Zufallszahlen in Listboxen
mithilfe von Shellsort zu ordnen.
Ich habe festgestellt, dass wenn ich z.B. 5 Zahlen sortieren
möchte, er nur die letzten 4 sortiert. Die erste bleibt aber
unverändert auf ihrem Platz. Woran könnte das liegen?
Mit inbegriffen ist noch eine Zeitmessung.

procedure Tform1.ShellSort(Sender: TObject);
var Abstand, i, j, Merke:integer;
Done :boolean;
Ende, Anfang :real;
begin
 Anfang:=Time;
 Abstand:=n;
 while (Abstand\>1) do
 begin
 Abstand:=Abstand div 2;
 repeat
 Done:=True;
 for j:= 1 to n-Abstand do
 begin
 i:=j+Abstand;
 if (Zahl[j]\>Zahl[i]) then
 begin
 Merke:=Zahl[j];
 Zahl[j]:=Zahl[i];
 Zahl[i]:=Merke;
 Done:=False
 end;
 begin
 listbox2.Items.Clear;
 for i:=0 to n-1 do
 begin
 listbox2.items.add(inttostr(Zahl[i]));
 end;
 Ende:=Time;
 end;
 end;
 until Done;
 end;
 Ende:=Time;
Edit1.Text:=FloatToStrF((Ende-Anfang)\*24\*3600,ffFixed, 10,5);
end;

Danke für die Hinweise! Es lag wirklich an der falsch gesetzten Schleifenvariablen.