Noch besser wäre es m.E. so
1) Am Anfang n nicht auf die Länge des Arrays stellen, sondern auf den höchsten Index.
2) Das Senken von n um 1 nicht am Ende der Repeat-Schleife ausführen, sondern am Anfang.
3) Die For-Schleife von 0 bis n laufen lassen.
4) Beim Until nur swaped abfragen. Die Abfrage, ob n einen bestimmten Grenzwert erreicht hat, ist bei dieser Konstruktion überflüssig.
Delphi-Quellcode:
function bubbleSort( A : array of <Datentyp> ) : array of <Datentyp>;
begin
n := High(A);
repeat
n := n - 1;
swaped := false;
for i := 0 to n do
if Compare(A[ i ], A[ i + 1 ]) > 0 then
begin
// A[i] und A[i + 1] vertauschen
swaped := true;
end
until not swaped;
end;