AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Vergleich von verschiedenen Sortieralgorithmen
Thema durchsuchen
Ansicht
Themen-Optionen

Vergleich von verschiedenen Sortieralgorithmen

Ein Thema von Alexander · begonnen am 5. Sep 2004 · letzter Beitrag vom 12. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Alexander
Registriert seit: 28. Aug 2002
Hallo,
ich habe gerade ebend ein kleines Progrämmchen geschrieben, was den Sortieralgo Selectionsort mit Bubblesort vergleicht. Nichts aufwendiges und aufregendes also.
Irgendwann kommen sicherlich noch weitere Sortieralgos hinzu. Aber ich muss sie mir erst noch anschauen und dafür fehlt leider die Zeit . Bubblesort und Selectionsort sind ja recht einfach (und langsam), die brauch man sich nicht anzuschauen, um sie zu verstehen. Die kann man prima selber erarbeiten.

Bei der Performancemessung habe ich mich bei Hagen bedient (). Es wird also nicht mit getTickCount verglichen.

Source und EXE sind im Anhang.

Edit: Ich habe jetzt endlich Insertion-Sort und Shell-Sort implementiert. Irgendwann werde ich noch weitere einbauen, aber derzeit fehlt mir leider die Zeit.

Edit 2: Titel leicht angepasst. Vorher: "Vergleich von Bubblesort und Selectionsort"
Angehängte Dateien
Dateityp: zip sort_213.zip (214,7 KB, 90x aufgerufen)
 
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#2
  Alt 5. Sep 2004, 13:15
Hi,

dir fehlt der VAR Parameter in den Sortierprozeduren, somit werden die Sortierergebnisse nie zurückgeschrieben (-> Es werden die unsortiereten Zahlen angezeigt).

Meine Ergebnisse (in MS)

Bubblesort: ~ 70000 ms
Selectionsort: ~ 25000 ms
Quicksort: ~ 25 ms (von mir eingebaut)

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Alexander

 
Turbo Delphi für .NET
 
#3
  Alt 5. Sep 2004, 13:24
Hi,
danke für's testen.
Das die Ergebnisse zurückgeschrieben werden, war ehrlich gesagt auch gar nicht meine Absicht, wollte nur ebend die Zahlen anzeigen lassen...
So große Zeitunterschiede zwischen bubblesort und selectionsort waren allerdings bei mir nicht .
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#4
  Alt 5. Sep 2004, 14:35
Ohne den Quelltext groß anzukucken, wie misst du denn die Zeiten? Mit GetTickCount? Dann ist das auf unterschiedlichen Systemen wertlos, da GetTickCount auch die Zeit misst, die dein Thread mit warten darauf verbringt wieder Rechenzeit zu geteilt zu bekommen und wenn viele andere Prozesse laufen und welche mit höherer Priorität dann kann dass schon mal ein paar Millisekunden dauern.

Ah, sehe gerade du machts es mit Hagens Code.

Nur beim Sortieren, reagiert dein Programm nicht mehr.
Michael
  Mit Zitat antworten Zitat
Alexander

 
Turbo Delphi für .NET
 
#5
  Alt 5. Sep 2004, 17:10
Jo. Ich mache das mit Hagen's Code. GetTickCount war mir auch zu "unsicher".

Das Programm reagiert deswegen nicht mehr, weil ich das Sortieren nicht in einen eigenen Thread ausgelagert habe, mal schaun vielleicht ändere ich das noch
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

 
Delphi 2005 Professional
 
#6
  Alt 5. Sep 2004, 17:28
Hi. Also bei mir ist der Unterschied auch nicht klein

Bubblesort: 40268,5 ms (Vergleiche: 705182705)
Selectionsort: 13706,5 ms (Vergleiche: 704982704)

Man liest sich, Stanlay
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH
 
#7
  Alt 6. Sep 2004, 09:05
@Alexander, nur weil du meine Routinen nutzt heist das aber noch nicht das Luckie's Aussage damit nicht mehr zuträfe. Die "Unabhängigkeit" vom Tasksystem des OS bezieht sich in den Routinen ausschließlich nur auf das Ausmessen und Ermitteln der CPU Taktfrequenz, aber nicht auf die einzelnen Messungen. D.h. auch mit diesem Routinen werden die Taktzyklen innerhalb von schlafenden Threads weiter mitgezählt. Deshalb und auch im generellen kann man unter Windows KEINE Absolutmessungen durchführen, das geht einfach nicht (bzw. es geht nur hypothetisch). Du kannst aber sehr wohl die relativen Geschwindigkeits-Unterschiede von einer Funktion zu einer anderen ermitteln. Unter der Voraussetzung das die Messzeit lang ist und somit in beiden Messungen das Betriebssystem gleichoft zum Zuge kommt.

Gruß Hagen
  Mit Zitat antworten Zitat
Alexander

 
Turbo Delphi für .NET
 
#8
  Alt 6. Sep 2004, 19:16
Hallo Hagen,
Danke dass du das noch mal betonst .
So meinte ich das allerdings auch nicht. Du hast ja in deinem Kommentar im Sourcecode geschrieben das deine Methode theoretisch x mal genauer ist als getTickCount. Und darauf habe ich mich im Prinzip bezogen. Das eine 100%ig Genauigkeit nicht erreicht werden kann, ist mir durch aus bewusst.

Hierbei geht es ja auch nur um den direkten Vergleich, um zu sehen, dass Selection-sort i.d.R. wersentlich schneller ist als der Bubblesort. Daher ist die 100%ige Genauigkeit auch nicht erforderlich

Grüße, Alexander

PS: Ich schau mir morgen wohl mal das Prinzip des Shell-Sorts an und baue ihn evtl. noch mit ein... (wenn ich ihn denn verstehe )
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH
 
#9
  Alt 7. Sep 2004, 01:14
Hm, wenn du lernen willst ok, ansonsten verschwende nicht deine Zeit und stattdessen beschäftige dich mit den verschiedenen Quicksort Verfahren. Diese sind theoretisch die schnellsten Verfahren (neben Heapsort) aber asymptotisch nur so schlecht wie einfacher Bubblesort. Der Vorteil gegenüber Heapsort ist eben das Quicksort sehr Resourcenschonend ist. In meiner langjährigen Erfahrung bin ich mit Insertion Sort für kleinere Sortierungen mit sehr wenigen Elementen sehr gute gefahren. Bei größeren Listen nutze ich immer Quicksort mit Primoraler Teilung und Insertion/Merge Sort im innersten rekursiven Funktionsaufruf.

Gruß Hagen
  Mit Zitat antworten Zitat
Alexander

 
Turbo Delphi für .NET
 
#10
  Alt 7. Sep 2004, 16:17
Hi,
ich werde mir demnächst, auch noch mal die anderen Sortieralgos (insbesondere auch Quicksort) anschauen und versuchen mehr oder weniger selber zu entwickeln und vor allem zu verstehen. Das war mehr oder weniger der Einstieg (bzw. zur Erinnerung, habe mich schon mal vor Jahren mit Sortieralgos beschäftigt, aber nicht all zu viel verstanden, war wohl noch zu jung...).
Als nächstes kommt wie gesagt der Shell-Sort. So ungefähr weiß ich auch schon wie er funktioniert (noch von damals, ich glaub ich war 12 oder 13 ), allerdings muss ich mir das noch mal genauer anschauen, um ein Delphi-Code oder auch einen allgemeinen zu schreiben...
Wenn ich mich recht erinnere, werden die Zahlen (oder was auch immer), in kleineren Listem/Arrays vorsortiert, dann immer wieder vergrößert und sortiert bis man das vollständige Array hat. Sortiert wird AFAIK mit Insertion-Sort.
Naja ich schaue mal, nur rennt mir irgendwie die Zeit immer davon...

PS: Aber danke für deinen Rat
Alexander
  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 16:32 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