AGB  ·  Datenschutz  ·  Impressum  







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

Listbox nach Datum sortieren

Ein Thema von Codix32 · begonnen am 29. Mai 2009 · letzter Beitrag vom 4. Jul 2009
 
Popov
(Gast)

n/a Beiträge
 
#26

Re: Listbox nach Datum sortieren

  Alt 28. Jun 2009, 16:33
Zitat von Codix32:
Popov, die Listbox soll ja nach Datums sortiert werden. Einmal absteigend nach Jahren und ein andermal nach Monaten, wobei im letzteren Fall die Jahre keine Rolle spielen.
Hä? Entweder du beschreibst das falsch oder ich verstehe es nicht. Entweder es wird sortiert oder es wird nicht sortiert. Es ist doch egal ob im letzten Fall die Jahre keine Rolle spielen. Gerade dann solltest du nicht mit Strings arbeiten, sondern mit Daten. Denn bei Daten kannst du viel einfacher Monate und Jahre ermitteln.

Ich gehe mal davon aus, daß du meinst, daß du zwei ListBoxen hast, und bei dem einem wird nach Jahren, bei den anderen nur nach Monaten (unabhängig von Jahren) sortiert. Aber auch da sollte alles in der Reihenfolge der Jahre sortiert sein.

Ich hab mir die QuickSort Routine noch mal angesehen, nachdem ich bemerkt habe, daß BubbleSort durchaus 400 Werte innerhalb einer Sekunde sortiert, bei 4000 Werten aber paar Minuten braucht.

Tatsächlich ist die QuickSort schneller und schaft 4000 Werte in zwei Sekunden. Hier also meine Prozedur von oben, nur mit QuickSort.

Delphi-Quellcode:
procedure LBSortieren(LB: TListBox); // QuickSort

  procedure QuickSort(LB: TListBox; iLo, iHi: Integer);
  var
    Lo, Hi: Integer;
    DataM, DataT: TData;
    StrT: String;
  begin
    Lo := iLo;
    Hi := iHi;
    DataM := TData(LB.Items.Objects[(Lo + Hi) div 2]);

    repeat
      while TData(LB.Items.Objects[Lo]).Datum < DataM.Datum do Inc(Lo);
      while TData(LB.Items.Objects[Hi]).Datum > DataM.Datum do Dec(Hi);

      if Lo <= Hi then
      begin
        StrT := LB.Items[Lo];
        DataT := TData(LB.Items.Objects[Lo]);

        LB.Items[Lo] := LB.Items[Hi];
        LB.Items.Objects[Lo] := LB.Items.Objects[Hi];

        LB.Items[Hi] := StrT;
        LB.Items.Objects[Hi] := DataT;

        Inc(Lo);
        Dec(Hi);
      end;
    until Lo > Hi;

    if Hi > iLo then QuickSort(LB, iLo, Hi);
    if Lo < iHi then QuickSort(LB, Lo, iHi);
  end;

begin
  QuickSort(LB, 0, LB.Count - 1);
end;
  Mit Zitat antworten Zitat
 


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 00:47 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