AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem bei einem Sortierverfahren

Ein Thema von Helios · begonnen am 4. Apr 2003 · letzter Beitrag vom 5. Apr 2003
Antwort Antwort
Seite 2 von 2     12
Daniel B
(Gast)

n/a Beiträge
 
#11
  Alt 4. Apr 2003, 20:29
Mach es doch vorsichtshalber! mal so lange wie Einträge in der ListBox sind, also:
for i := o to ListBox.Items.Count -1 Grüsse, Daniel
  Mit Zitat antworten Zitat
Helios

Registriert seit: 4. Apr 2003
7 Beiträge
 
#12
  Alt 4. Apr 2003, 20:59
Aber wie oft ich sortieren muss, ist unabhängig von der Anzahl der zu sortierenden Zahlen. Wenn ich z.B. nur 12 Zahlen habe, kann es sein, dass ich 4x sortieren muss. Wenn ich z.B. 100 zahlen habe, kann es sein, dass ich nur 3x sortieren muss. Den Vorgang einfach automatisch mehrmals wiederholen lassen, ist ja nicht wirklich die richtige Lösung. Da muss es doch noch eine bessere Möglichkeit geben.

Dein Vorschlag funktioniert zwar:for i := o to ListBox.Items.Count -1 Nur kann man dann das Sortierverfahren nicht mehr als Quicksort bezeichnen. Es ist so bei großen Zahlenmengen wirklich extrem langsam
  Mit Zitat antworten Zitat
Helios

Registriert seit: 4. Apr 2003
7 Beiträge
 
#13
  Alt 5. Apr 2003, 11:55
Hier noch mal die aktuelle Version des Quellcodes. Es gibt immernoch das gleiche Problem: Damit die Liste komplett sortiert ist, muss ich das Sortierverfahren mehrmals anwenden. Vielleicht hat ja jemand noch ein paar Tipps.
Delphi-Quellcode:
procedure TForm1.Sortierverfahren4Click(Sender: TObject);
var
 n:integer;
 timer_s_ts,timer_e_ts:ttimestamp;
 procedure Quicksort(links,rechts:integer);
 var
  el,er,grenze: integer;
  hilfe:string;
 begin
  el:=links; er:=rechts; grenze:=strtoint(ListeSortiert.Items.Strings[links]);

   repeat
      while strtoint(ListeSortiert.Items.Strings[el])<grenze do el:=el+1;
      while strtoint(ListeSortiert.Items.Strings[er])>grenze do er:=er-1;
      if(el <= er) then begin
        hilfe:=ListeSortiert.Items.Strings[el];
        ListeSortiert.Items.Strings[el]:=ListeSortiert.Items.Strings[er];
        ListeSortiert.Items.Strings[er]:=hilfe;
      end;
      el:=el+1;
      er:=er-1;
   until el>=er;
   if (er > links) then QuickSort(links,er);
   if (el < rechts) then QuickSort(el,rechts);
 end;
begin
timer_s_ts:=DateTimeToTimeStamp(now());
 Write;
 n:=ListeSortiert.Items.Count-1;
 Quicksort(0,n);
timer_e_ts:=DateTimeToTimeStamp(now());
GebrauchteZeit.Text:=inttostr((timer_e_ts.Date*24*60*60*1000+timer_e_ts.Time)-(timer_s_ts.Date*24*60*60*1000+timer_s_ts.Time));
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:52 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