AGB  ·  Datenschutz  ·  Impressum  







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

Quicksort ist zu langsam?

Ein Thema von tr909 · begonnen am 3. Mai 2005 · letzter Beitrag vom 3. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
tr909

Registriert seit: 5. Nov 2004
193 Beiträge
 
Turbo Delphi für Win32
 
#1

Quicksort ist zu langsam?

  Alt 3. Mai 2005, 08:53
Moin.

Evtl. wäre ja mal jemand so nett einen Blick auf folgenden Quicksort zu werfen. Das sortieren funktioniert richtig, nur ist es sehr langsam.


Der Aufruf erfolgt mit QuickSort(0, length(SortString));
SortString ist ein String

Code:
procedure TfrmSortAlg.QuickSort(l, r: integer);
var
  i, j: Integer;
  temp: char;
begin
  if (r > l) then
  begin
    i := l - 1;
    j := r;
    repeat
      repeat i := i + 1 until SortString[i] >= SortString[r];
      repeat j := j - 1 until SortString[j] <= SortString[r];
      if (j > i) then
      begin
        temp := SortString[i];
        SortString[i] := SortString[j];
        SortString[j] := temp;
      end;
    until (j <= i);
    temp := SortString[i];
    SortString[i] := SortString[r];
    SortString[r] := temp;
    quicksort(l, i - 1);
    quicksort(i + 1, r);
  end;
end;
Gruß
tr909
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 09:09
Was soll denn da sortiert werden? Die Zeichen in SortString?
Auf den ersten Blick würde ich sagen, das ist kein Quicksort. Viel zu viele Repeats und dann ruft sich die funktion noch selbst auf. Die Schleifen werden bestimmt eine Million mal aufgerufen oder?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 09:14
Hai tr909,

bei den Tutorials hat unser Chef-...Dingens etwas zu Sortieralgos geschrieben.
Eventuell ist das ja interessant für dich.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)
Online

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#4

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 09:16
Zitat von Quake:
Auf den ersten Blick würde ich sagen, das ist kein Quicksort. Viel zu viele Repeats und dann ruft sich die funktion noch selbst auf.
Was willst Du denn? Ist doch ein Quicksort.
Der Quicksort ist rekursiv, muss sich also selber aufrufen. Und vor dem rekursiven Aufruf wird der String in zwei Teile geteilt. Das Passiert normalerweise in einer extra Funktion, die hat er sich hier gespart und das Partition eben direkt in der Funktion gemacht.

Die Implementierung scheint auf den ersten Blick zu stimmen. Die Frage ist, wie gross ist Deine zu sortierende Datenmenge? Normalerweise ist Quicksort nämlich der im durchschnitt schnellste bekannte Sortieralgorithmus.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
tr909

Registriert seit: 5. Nov 2004
193 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 09:17
Zitat von Quake:
Was soll denn da sortiert werden? Die Zeichen in SortString?
Genau.
Zitat von Quake:
...und dann ruft sich die funktion noch selbst auf. Die Schleifen werden bestimmt eine Million mal aufgerufen oder?
Liegt daran, das das ein rekursiver Algorithmus ist

Habe das anhand eines Pseudocodes geschreiben.

@Sharky
Ich gucke mal was schäffe geschrieben hat


€Phoenix

Also zum testen habe ich mal

jkloazfhrndud88dkdkdmfnsdoiuwe4895b79348759034c5f0 345b9ß3

in einer Schleife 100000 mal sortieren lassen.

Folgende Ergebnisse habe ich erhalten

Selection Sort ca 900 ms
Insertion Sort ca 35 ms
Bubble Sort ca 30 ms
Quick Sort ca 800 ms


Gruß
tr909
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 09:46
Probier mal das hier
Delphi-Quellcode:
procedure QuickSort(l,r: integer);
var
  i,j: integer;
  TempChar: char;
begin
  i:=l;
  while i<r do
  begin
    j:=i;
    while j>l do
    begin
      if SortString[j]<SortString[j-1] then
      begin
        TempChar:=SortString[j];
        SortString[j]:=SortString[j-1];
        SortString[j-1]:=TempChar;
      end;
      dec(j);
    end;
    inc(i)
  end;
end;
Ich dachte immer das ist QuickSort !??!
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 09:55
Quicksort sollte so ungefair aussehen.

Von den Algorithmen ist bei mir immer Quicksort der schnellste. Versuche mal den Code von dem Link, den ich gerade gepostet habe, vielleicht geht das schneller.
  Mit Zitat antworten Zitat
tr909

Registriert seit: 5. Nov 2004
193 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 13:31
ich werde es nachher mal ausprobieren.
Quicksort sollte ja eigentlich auch mit der schnellste sein.

Danke schonmal für die schnelle Hilfe

Gruß
tr909
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 14:00
Zitat von Quake:
Probier mal das hier
Delphi-Quellcode:
procedure QuickSort(l,r: integer);
var
  i,j: integer;
  TempChar: char;
begin
  i:=l;
  while i<r do
  begin
    j:=i;
    while j>l do
    begin
      if SortString[j]<SortString[j-1] then
      begin
        TempChar:=SortString[j];
        SortString[j]:=SortString[j-1];
        SortString[j-1]:=TempChar;
      end;
      dec(j);
    end;
    inc(i)
  end;
end;
Ich glaube zu wissen, dies ist Bubble-Sort!

Ich dachte immer das ist QuickSort !??!
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Quicksort ist zu langsam?

  Alt 3. Mai 2005, 14:21
Ok, dann nenne ich die Procedure um in QuakeSort.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:38 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