Ob das ein TStringGrid, eine TListbox oder TSchießMichTot ist, spielt doch für die Logik gar keine Rolle. Erweitern wir meinen Code von gestern mal dahingehend, dass die Zahlen in der gewünschten Reihenfolge in ein weiteres Array geschrieben werden (den Tippfehler habe ich übrigens mittlerweile korrigiert):
Delphi-Quellcode:
type
TIntArray = array[1..10] of integer;
procedure MinimumFirst(const Src: TIntArray; out Dest: TIntArray);
var
(* Variable für die kleinste Zahl im Array *)
Minimum: integer;
(* Variable für den Index der kleinsten Zahl innerhalb des Array *)
IndexOfMinimum: integer;
(* Laufvariable für die Schleife *)
i: integer;
(* aktueller Index im Zielarray *)
DestIndex: integer;
begin
(* Initial setzen wir Minimum sowie dessen Index auf das erste Element im Array *)
Minimum := Src[Low(Src)];
IndexOfMinimum := Low(Src);
(* Nun den Rest des Array durchgehen, vergleichen und Variablen ggf. anpassen *)
for i := Low(Src) + 1 to High(Src) do
if Src[i] < Minimum then
begin
Minimum := Src[i];
IndexOfMinimum := i;
end;
DestIndex := Low(Dest);
(* Nun in das Ausgabe-Array schreiben *)
(* Zuerst ab der kleinsten Zahl bis zum Ende *)
for i := IndexOfMinimum to High(Src) do
begin
Dest[DestIndex] := Src[i];
inc(DestIndex);
end;
(* Nun noch die ggf. verbliebenen *)
for i := Low(Src) to IndexOfMinimum - 1 do
begin
Dest[DestIndex] := Src[i];
inc(DestIndex);
end;
end;
Ein kurzer Test mit einer Listbox, damit man auch etwas sieht:
Delphi-Quellcode:
procedure TFormTest.FormCreate(Sender: TObject);
const
Input: TIntArray = (5, 34, 23, 12, 8, 3, 42, 1, 98, 3);
var
Output: TIntArray;
i: integer;
begin
MinimumFirst(Input, Output);
for i := Low(Output) to High(Output) do
ListBox1.Items.Add(IntToStr(Output[i]));
end;