Einzelnen Beitrag anzeigen

Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#1

Sortier-Problem (Quicksort)

  Alt 24. Aug 2011, 16:52
Hab ein kleines Problem, hoffe es ist klein.
Ich will mein Array (=Liste) nach Ankunft sortieren.
Dieses Array besteht aus Records (=TBusEintrag) mit Linie, Ziel, Ankunft, Abfahrt, Zeit.
Nun soll nach der Ankunftszeit sortiert werden. Ich benutze dafür Quicksort.
Dies klappt auch, doch leider wird dann nur der Teil "Ankunft" sortiert und die anderen Sachen bleiben so stehen im Record. Ich möchte aber das ganze Record nach der Ankunft sortieren. Hoffe ihr versteht was ich meine. Hier mein Code von Quicksort und WerteTauschen:

Code:
procedure TForm1.WertTauschen(var Liste : Array of PBusEintrag; StelleA, StelleB: Integer);
   var tempI: TTime;
   begin
      tempI := Liste[StelleA].Ankunft;
      Liste[StelleA].Ankunft := Liste[StelleB].Ankunft;
      Liste[StelleB].Ankunft := tempI;
   end;
Code:
procedure TForm1.Quicksort(var Liste : Array of PBusEintrag; erstes,letztes:integer);
      var
      vonLinks, vonRechts, mitte:integer;
      vergleichsElement: TTime;

   begin
      if erstes < letztes then begin
         mitte := (erstes + letztes) div 2;
         vergleichsElement := Liste[mitte].Ankunft;
         vonLinks := erstes;
         vonRechts := letztes;

         while vonLinks <= vonRechts do begin {noch nicht fertig zerlegt?}
            while Liste[vonLinks].Ankunft < vergleichsElement do {linkes Element suchen}
               vonLinks := vonLinks + 1;
                  while Liste[vonRechts].Ankunft > vergleichsElement do {rechtes Element suchen}
                     vonRechts := vonRechts - 1;
                     if vonLinks <= vonRechts then begin
                        WertTauschen(Liste, vonLinks, vonRechts); {Elemente tauschen}
                           vonLinks := vonLinks + 1;
                           vonRechts := vonRechts - 1;
                     end;
      end;

      Quicksort(Liste, erstes, vonRechts); {li. und re. Teilfeld zerlegen}
      Quicksort(Liste, vonLinks, letztes);

     end;
   end;
Hoffe die Teile vom Code reichen, sonst einfach Nachfragen
  Mit Zitat antworten Zitat