AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Quicksort-Implementierung

Ein Thema von Shimau · begonnen am 10. Jun 2009 · letzter Beitrag vom 15. Jun 2009
Antwort Antwort
Seite 2 von 2     12   
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Problem mit Quicksort-Implementierung

  Alt 14. Jun 2009, 13:53
Dein Dreieckstausch sieht... interessant aus.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: Problem mit Quicksort-Implementierung

  Alt 14. Jun 2009, 15:59
ACHTUNG! Hier kommt ein versteckter Hinweis!
Zitat von Apollonius:
Dein Dreieckstausch sieht... interessant aus.
Das war der versteckte Hinweis.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Problem mit Quicksort-Implementierung

  Alt 14. Jun 2009, 16:39
Ach Du lieber Gott

Wenn zwei den Wald vor lauter Bäumen nicht sehen, sind dann beide dadurch entschuldigt, dass Sie zu zweit waren?

Bei Daniels Code fehlte damals der Insertion-Aufruf, weshalb der bei mir auch nicht funktionierte
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Problem mit Quicksort-Implementierung

  Alt 14. Jun 2009, 16:41
Ist mir beim ersten drüber blicken auch gar nicht aufgefallen
Aber bei Wikipedia sieht der Pseudocode wesentlich schlanker aus, als diese Implementierung von QuickSort.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Problem mit Quicksort-Implementierung

  Alt 14. Jun 2009, 16:50
Ich hatte ihm ja meinen Code angeboten, da ist der QuickSort Teil kleiner und Insertion gleich. Zudem ist er auch noch 10% schneller, aber er will seinen Code zum Laufen bringen, was ich verstehen kann.

Das er im Zweifel aber nur Insertion genommen hätte, statt meinen, hat mich doch erschreckt
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: Problem mit Quicksort-Implementierung

  Alt 14. Jun 2009, 23:28
Satty67,

wäre es Dir möglich, eine kleine Applikation zu schreiben, die die Performanceunterschiede zwischen dem generischen Quicksort und der Variante mit InsertionSort belegt? Ich meine mich zu erinnern, das eine schlanke QS-Implementierung mittlerweile (und Aufgrund optimierender Compiler und CPU Code-Cache) nicht mehr langsameer ist. Da man darüber nicht diskutieren muss, sondern Fakten sprechen lassen kann, wäre es wirklich toll, wenn Du das belegen könntest. Eine iterative Variante des QS sollte zudem auch schneller sein, aber das ließe sich -ein geeignetes kleines Testframework vorausgesetzt- sicherlich belegen/widerlegen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#17

Re: Problem mit Quicksort-Implementierung

  Alt 15. Jun 2009, 07:33
Hallo alzaimar,

sowas hab' ich sogar schon geschrieben... Also eine Plattform, mit der ich InsertSort und Quicksort teste bzw. Varianten davon und Kombinationen incl. Kontrollausgabe ob auch richtig sortiert wird. Ist noch ein Überbleibsel aus dem letzten Marathon, bei dem ich mich der SkipList geschlagen geben musste

Ich werd' das heute nach der Arbeit etwas überarbeiten, im jetzigen Zustand möchte ich den Code niemandem zumuten. Ich lagere am besten jede Sortier-Routine in eine Extra Unit aus und poste dann heute Abend die Testplattform.
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#18

Re: Problem mit Quicksort-Implementierung

  Alt 15. Jun 2009, 08:10
Habe hierzu diesen netten Link gefunden: http://www.stefan-baur.de/cs.algo.insertionsort.html
hmm, besser diesen wegen der Übersicht: http://www.stefan-baur.de/cs.algo.sort.html
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#19

Re: Problem mit Quicksort-Implementierung

  Alt 15. Jun 2009, 16:32
Ok, hab' mein Chaos-Projekt zum Testen von Sortierverfahren "etwas" aufgeräumt und die Sorter in Units ausgelagert. Sollte so nicht schwer sein, einen eigenen Sorter zum Vergleichen zu implementieren.

Ich will kein Gemecker, wegen der Programmierung, das war vorher noch wesentlich chaotischer, jetzt geht das etwas.

Drin sind BubbleSort, SelectionSort, QuickSort (Rekursiv) aus dem Thread-Beispiel von Delphi und InsertSort. Wobei ich bei QuickSort einen unnötigen Swap noch umgangen hab. Zusätzlich noch QuickInsertSort, das aber bei Speicher-Sortieren seine Vorteile nicht ausspielen kann und QuickSort (Iterativ), wobei ich etwas Probleme beim umsetzten des Codes hatte. Für Strings musste ich eine zusätzliche Prüfung einbauen.

Wer will, kann seinen Code einbauen und Testen oder das ganze auf Dateien anwenden, um z.B. die Vorteile von QuickInsertSort zu testen.

PS: Die Exe ist mit dabei und wer FastMM4 nicht verwendet, einfach aus der Deklaration rauswerfen.

PPS: Schwer es genau zu sagen, aber man sieht eine Tendenz. QuickInsertSort ist beim Sortieren von Speicherlisten sogar minimal langsamer. Überhaupt spricht bei der Performance von Quicksort nichts dagegen, für Speicherlisten nur QuickSort zu nehmen. Für Dateien ist die SkipListe besser, die beim Speichersortieren wohl wegen kompletten Kopieren der Liste ein Putt liefert.

Ergebnisse:
Code:
_358 ms für 10.000 Int64-Elemente mit Bubble-Sort
_214 ms für 10.000 Int64-Elemente mit Selection-Sort
__49 ms für 10.000 Int64-Elemente mit Insertion-Sort
___0 ms für 10.000 Int64-Elemente mit Quick-Sort (rekursiv, kompakt)
___1 ms für 10.000 Int64-Elemente mit Quick-Sort (iterativ)
___1 ms für 10.000 Int64-Elemente mit Quick/Insert-Sort (rekursiv, kompakt)

3770 ms für 10.000 String-Elemente mit Bubble-Sort
1389 ms für 10.000 String-Elemente mit Selection-Sort
1068 ms für 10.000 String-Elemente mit Insertion-Sort
___5 ms für 10.000 String-Elemente mit Quick-Sort (rekursiv, kompakt)
___6 ms für 10.000 String-Elemente mit Quick-Sort (iterativ)
___6 ms für 10.000 String-Elemente mit Quick/Insert-Sort (rekursiv, kompakt)

_357 ms für 2.500.000 Int64-Elemente mit Quick-Sort (rekursiv, kompakt)
_370 ms für 2.500.000 Int64-Elemente mit Quick-Sort (iterativ)
_417 ms für 2.500.000 Int64-Elemente mit Quick/Insert-Sort (rekursiv, kompakt)

3150 ms für 2.500.000 String-Elemente mit Quick-Sort (rekursiv, kompakt)
3596 ms für 2.500.000 String-Elemente mit Quick-Sort (iterativ)
3652 ms für 2.500.000 String-Elemente mit Quick/Insert-Sort (rekursiv, kompakt)
Angehängte Dateien
Dateityp: 7z sortieren_basiswissen_20090615_1623_620.7z (161,1 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 07:25 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