Ich glaube Deine BubbleSort Routine ist mangelhaft, zumindest im Nachbau funktionierte es nicht.
Hier mal der Nachbau, der aber mit ein paar Änderungen funktioniert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
pyt1 :
array[1..10]
of Byte = (4,7,2,9,4,1,0,8,3,5);
var
pyt4 : Byte;
i, bots : Integer;
getauscht : Boolean;
begin
// Init
bots := High(pyt1);
ListBox1.Clear;
ListBox1.Items.Add('
Items: '+IntToStr(bots));
// Bubblesort
repeat
getauscht := false;
for i := 1
to bots - 1
do begin
if pyt1[i] > pyt1[i+1]
then begin
pyt4 := pyt1[i];
pyt1[i] := pyt1[i+1];
pyt1[i+1] := pyt4;
getauscht := true;
end;
end;
dec(bots);
// Laut Pseudocode Max -1
until (
not getauscht)
and (bots < 2);
// Laut Pseudocode Abbruch bei "Nicht getauscht" und "Liste fertig"
// Zum Prüfen des Ergebnis
for i := 1
to High(pyt1)
do
ListBox1.Items.Add(IntToStr(pyt1[i]));
Im Pseudocode steht ja am Ende "solange vertauscht und n >= 1". Da Delphi aber auf "solange nicht" prüft, müssen beide Bedingungen negiert geprüft werden. Zudem muss nach Durchlauf einer Schleife der Zeiger auf das letzte Listen-Element decrementiert werden.