Ich muß zum Beispiel das Wort NOTEBOOK so sortieren, daß die Reihenfolge doppelt vorkommender Buchstaben erhalten bleibt. Hier also 54812673. Ein herkömmliches stabiles Sortierverfahren berücksichtigt das nicht (weil O eben O). Ich brech mir dabei grad einen ab.
Hat jemand eine bessere Idee? (Die Indices (Dest) brauch ich im Programm später).
Delphi-Quellcode:
function MinCharPos(const S: string; const NoChar: char): integer;
var
MinChar: Char;
I, J: integer;
begin
Result := 0;
MinChar := NoChar;
for I := 1 to Length(S) do
if S[I] <> NoChar then
begin
MinChar := S[I];
Break;
end;
if MinChar <> NoChar then
begin
for I := 1 to Length(S) do
for J := 1 to Length(S) do
if (I <> J) and (S[I] <> NoChar) and (S[I] <= MinChar) then
MinChar := S[I];
for I := Length(S) downto 1 do
if S[I] = MinChar then
Result := I;
end;
end;
procedure SortByKey(const S, Key: string; Dest: TIntegerList); // Spaltengenau sortieren;
var
TempKey: string;
I, J: integer;
begin
Dest.Clear;
if (Length(Key) > 0) and (Length(Key) = Length(S)) then
begin
for I := 0 to Length(Key) do
Dest.Add(0);
TempKey := Key;
for I := 1 to Length(TempKey) do
begin
J := MinCharPos(TempKey, Char(254));
Dest[I] := J;
TempKey[J] := Char(254);
end;
end;
end;