![]() |
Quicksort ist zu langsam?
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:
Gruß
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; tr909 |
Re: Quicksort ist zu langsam?
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? |
Re: Quicksort ist zu langsam?
Hai tr909,
bei den Tutorials hat unser Chef-...Dingens etwas zu Sortieralgos ![]() Eventuell ist das ja interessant für dich. |
Re: Quicksort ist zu langsam?
Zitat:
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. |
Re: Quicksort ist zu langsam?
Zitat:
Zitat:
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 |
Re: Quicksort ist zu langsam?
Probier mal das hier
Delphi-Quellcode:
Ich dachte immer das ist QuickSort !??! :gruebel:
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; |
Re: Quicksort ist zu langsam?
Quicksort sollte
![]() 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. |
Re: Quicksort ist zu langsam?
ich werde es nachher mal ausprobieren.
Quicksort sollte ja eigentlich auch mit der schnellste sein. Danke schonmal für die schnelle Hilfe Gruß tr909 |
Re: Quicksort ist zu langsam?
Zitat:
|
Re: Quicksort ist zu langsam?
Ok, dann nenne ich die Procedure um in QuakeSort. :lol:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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-2025 by Thomas Breitkreuz