AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Karten sortieren

Ein Thema von The Lord · begonnen am 3. Apr 2008 · letzter Beitrag vom 3. Apr 2008
Antwort Antwort
The Lord

Registriert seit: 19. Sep 2005
Ort: Dortmund
125 Beiträge
 
Turbo Delphi für Win32
 
#1

Karten sortieren

  Alt 3. Apr 2008, 20:59
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
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
Alexander
Dunkel die andere Seite ist...
Klappe Yoda und iss deinen Toast!
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz