Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

Spaltengenau sortieren

  Alt 11. Jan 2015, 16:33
Delphi-Version: 2007
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;
  Mit Zitat antworten Zitat