AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bubblesort einer Listbox. Mit 3 Verknüfungen
Thema durchsuchen
Ansicht
Themen-Optionen

Bubblesort einer Listbox. Mit 3 Verknüfungen

Ein Thema von Sascha_OW · begonnen am 29. Nov 2005 · letzter Beitrag vom 29. Nov 2005
 
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Bubblesort einer Listbox. Mit 3 Verknüfungen

  Alt 29. Nov 2005, 17:15
Hallo,

Dein Fehler liegt hier:
 if strtofloat(List.Items[j]) > strtofloat(List.Items[i]) then Du vergleichst ja immer die unsortierte Liste, da Du das Ergebnis erst am Ende wieder der Liste zuordnest. Bubblesort braucht aber eine sich langsam sortierende Liste.
Um das Problem mit der Geschwindigkeit zu lösen versuche mal folgendes:
Delphi-Quellcode:
procedure TForm1.Sort(List: TListBox);
var
  i, j: Integer;
begin
  Progressbar2.Position := 0;
  progressbar2.Max := Listbox2.Count - 1;
  ListBox1.Items.BeginUpdate;
  ListBox2.Items.BeginUpdate;
  ListBox3.Items.BeginUpdate;
  ListBox4.Items.BeginUpdate;
  for i := 0 to List.Items.Count - 1 do
  begin
    Progressbar2.Position := Progressbar2.Position + 1;
    for j := i + 1 to List.Items.Count - 1 do
    begin
      if List.Items[j] > List.Items[i] then
      begin
        Listbox1.Items.Exchange(i, j);
        Listbox2.Items.Exchange(i, j);
        Listbox3.Items.Exchange(i, j);
        Listbox4.Items.Exchange(i, j);
      end;
    end;
  end;
  ListBox1.Items.EndUpdate;
  ListBox2.Items.EndUpdate;
  ListBox3.Items.EndUpdate;
  ListBox4.Items.EndUpdate;
end;
Damit schaltest Du die Bildschirmaktualisierung aus, das beschleunigt ungemein. Außerdem solltest Du nicht BubbleSort verwenden, das ist so ziemlich das Langsamste was es gibt. Nimm lieber Quicksort. Ich hab mal ein Beispiel geschrieben:
Delphi-Quellcode:
procedure TForm1.SortQuick(List: TListBox);

  function Compare(S1, S2: String): Integer;
  begin
    // Negatives Ergebnis -> S1 ist kleiner
    // Positives Ergebnis -> S2 ist kleiner
    // Null -> Gleicher String
    Result := StrToInt(S1) - StrToInt(S2);
  end;

  procedure Exchange(I, J: Integer);
  begin
    // Hier wird getauscht
    ListBox1.Items.Exchange(I, J);
    ListBox2.Items.Exchange(I, J);
    ListBox3.Items.Exchange(I, J);
    ListBox4.Items.Exchange(I, J);
  end;

  procedure QuickSort(L, R: Integer);
  var
    I, J: Integer;
    S: String;
  begin
    repeat
      I := L;
      J := R;
      S := List.Items[(L + R) shr 1];
      repeat
        while Compare(List.Items[I], S) < 0 do
          Inc(I);
        while Compare(List.Items[J], S) > 0 do
          Dec(J);
        if I <= J then
        begin
          Exchange(I, J);
          Inc(I);
          Dec(J);
        end;
      until I > J;
      if L < J then
        QuickSort(L, J);
      L := I;
    until I >= R;
  end;

begin
  QuickSort(0, List.Items.Count - 1);
end;
Aufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  // Update ausschalten
  ListBox1.Items.BeginUpdate;
  ListBox2.Items.BeginUpdate;
  ListBox3.Items.BeginUpdate;
  ListBox4.Items.BeginUpdate;

  // Sortieren
  SortQuick(ListBox1);

  // Update einschalten
  ListBox1.Items.EndUpdate;
  ListBox2.Items.EndUpdate;
  ListBox3.Items.EndUpdate;
  ListBox4.Items.EndUpdate;
end;
Die Funktion Compare kannst Du so anpassen, dass sie Deinen Bedürfnissen entspricht.

Gruß
xaromz
  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 13:36 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 by Thomas Breitkreuz