Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Karten sortieren (https://www.delphipraxis.net/111461-karten-sortieren.html)

The Lord 3. Apr 2008 19:59


Karten sortieren
 
Hi,

ich arbeite mit der cards.dll und habe einiges von hier übernommen. Meine Problem ist die Auswertung des Blatts. Wenn ich aber die Karten sortiere ist es einfacher (haben die glaube ich auch gemacht). Nur wie kann ich am besten einfach sortieren?

Kann ich das direkt irgendwie mit dem Typ machen? Also a la
Delphi-Quellcode:
if TBlatt.Wert[1] < TBlatt.Wert[2] ...
?
Geht wahrscheinlich nicht... Aber in c++ kann man ja alles mögliche vergleichen :(

Ansonsten würde mir nur noch einfallen den verschiedenen Karten Werte zuzuweisen und dann diese Werte zu sortieren.

Könnt ihr mir da nen Tipp geben?

Alex

busybyte 3. Apr 2008 20:07

Re: Karten sortieren
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz