Thema: Delphi Karten sortieren

Einzelnen Beitrag anzeigen

busybyte

Registriert seit: 15. Sep 2006
165 Beiträge
 
#2

Re: Karten sortieren

  Alt 3. Apr 2008, 21:07
Mit Deinem Konstrukt musst Du Quicksort entsprechend
dem Typ TKarte anpassen so wie unten funktioniert das nicht direkt.
Delphi-Quellcode:
Type
  TIntegerArray=Array of integer;

 procedure QuickSortint2(var A,oldindex: TintegerArray; iLo, iHi: Integer); //Var ändert die übergebene Variable direkt!!!
  var
    Lo, Hi, Mid, T,Tindex: Integer;
    IndexList:Array of integer;
    L1_,cnt1_:integer;
  begin
    while (Length(A)<1) do exit;

    Lo := iLo;
    Hi := iHi;
    Mid := A[(Lo + Hi) div 2];
    repeat
      while A[Lo] < Mid do Inc(Lo);
      while A[Hi] > Mid do Dec(Hi);

      if Lo <= Hi then
      begin
       T := A[Lo];
        Tindex:=oldindex[Lo];

        A[Lo] := A[Hi];
        oldindex[Lo]:=oldindex[Hi];

        A[Hi] := T;
        oldindex[Hi]:=Tindex;
        Inc(Lo);
        Dec(Hi);
      end;
    until Lo > Hi;
    if Hi > iLo then
    QuickSortInt2(A,oldindex, iLo, Hi);
    if Lo < iHi then
    QuickSortInt2(A,oldindex, Lo, iHi);
  end;
A ist dann die temporäre Werteliste und oldindex die Indexliste von Blatt bzw. TBlatt bzw Wert.
Dann wäre nach dem sortieren oldindex[0] der index des Blattes mit dem niedrigsten Wert.
Für Oldindex verwendest Du natürlich eine eigene Integerliste ,die direkt durch den Var Parameter in
der Procedure geändert wird.Nicht so elegant wie direkt die Werte zu sortieren aber vorerst am einfachsten:
Du legst Du 2 neue Listen an. 1.mit den Werten,2. mit den Indexen (0,1,2,3...)
und verwendest anschliessend die neue Indexliste die die alten Indexe/Indizes (sortiert) enthält.
I love DiscCat
  Mit Zitat antworten Zitat