BTW Ist die Angabe der Reihenfolge 54812673 bewusst falsch, oder nur vertippt?
Habe ich da was nicht richtig verstanden?
Delphi-Quellcode:
NOTEBOOK
12345678
54812673
BEKNOOOT
Alternativer Code (der Sinn des Parameters S erschließt sich mir nicht ganz):
Delphi-Quellcode:
procedure SortByKey(const Key: string; Dest: TIntegerList);
var
Ch: Char;
I: Integer;
LastKey: Char;
MinKey: Char;
MinPos: Integer;
begin
Dest.Clear;
LastKey := #0;
while Dest.Count < Length(Key) do begin
{ suche kleinsten, der größer als LastKey ist, und speichere in MinKey. }
MinPos := 0;
for I := 1 to Length(Key) do begin
Ch := Key[I];
if (Ch > LastKey) and ((MinPos = 0) or (Ch < MinKey)) then begin
MinKey := Ch;
MinPos := I;
end;
end;
{ Position anfügen }
Dest.Add(MinPos);
{ das wird unser neuer LastKey }
LastKey := MinKey;
{ alle folgenden Positionen anfügen, die gleich LastKey sind }
for I := MinPos + 1 to Length(Key) do begin
if Key[I] = LastKey then begin
Dest.Add(I);
end;
end;
end;
end;