AGB  ·  Datenschutz  ·  Impressum  







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

Heapsort erklären?

Ein Thema von AlexII · begonnen am 3. Jul 2011 · letzter Beitrag vom 5. Jul 2011
Antwort Antwort
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Heapsort erklären?

  Alt 3. Jul 2011, 17:27
Hallo,

ich versuche schon seit einer Zeit den Heapsort zu verstehen, aber es geht mir nicht in den Kopf.
Ich hab hier dieses Video gefunden, das ist zwar laut Kommentaren gut, aber ich verstehe nicht wieso ab der 55 Sekunde die 2 mit der 4 nicht vertauscht wird? Kann mir das jemand erklären? Danke!

http://www.youtube.com/watch?v=a7aXY...eature=related
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII ( 3. Jul 2011 um 17:54 Uhr)
  Mit Zitat antworten Zitat
Romiox

Registriert seit: 14. Okt 2010
Ort: Ruhrpott
57 Beiträge
 
#2

AW: Heapsort erklären?

  Alt 3. Jul 2011, 22:21
Wenn ich das richtig sehe werden bei 1:18 genau diese beiden Zahlen vertauscht *scratch*
Janis F.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Heapsort erklären?

  Alt 3. Jul 2011, 22:28
Tatsächlich!

Ja ich hab da Pause geklickt, weil wozu weiterschauen, wenn man das eine nicht verstanden hat.

Danke dir!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Heapsort erklären?

  Alt 3. Jul 2011, 23:05
War es bei Heapsort nicht so, dass man es beim ersten Schritt in zwei Teile teilt und dann von den beiden Teilen jeweils, falls nötig das erste und letzte Element vertauscht? Dann teilt man die Teile wieder und vertauscht bei Bedarf wieder. Und das geht so lange bis man nicht mehr teilen kann?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Woyzeck

Registriert seit: 9. Jun 2009
60 Beiträge
 
#5

AW: Heapsort erklären?

  Alt 5. Jul 2011, 18:43
hallo,

hab das Video jetzt nicht zuende geschaut. Aber grundsätzlich macht man beim Heapsort 3 Schritte.

Im ersten Schritt wird das Array oder die Liste oder wo auch immer deine Daten drinstehen sequenziell in einen Binärbaum "eingetragen". (Das macht man natürlich nur in Gedanken. Beim Programmieren ist der Heap ja weiterhin ein Feld) Stichwort: sequentielle Darstellung eines Binärbaums.

Nun kommt der zweite Schritt: Das Herstellen der Heapeigenschaft.
Hierzu muss immer der parent-Knoten größer sein, als seine Kinder.
Dazu gehst du dein Feld von hinten bzw. deinen Baum/Heap von unten durch und suchst ein Element, das kleiner ist als sein Vorgänger. Ist das der Fall tauschst du und fängst wieder von hinten an, nach Verletzungen der Heapeigenschaft zu suchen.

Jetzt folgt der dritte Schritt: Nun hat man ja das größte Element in der Wurzel stehen, also tauscht man das mit dem letzten Element (Im ersten Schritt ist das das Element ganz unten rechts). Nun musst du die Wurzel "einsinken" lassen, da sie ja nicht mehr das größte Element ist. Du vergleichst also mit den Kindern und tauscht mit dem größeren der Kinder, damit die Heapeigenschaft wieder hergestellt wird. Das machst du so lange, bis die neue Wurzel an einem Punkt angekommen ist, wo die Kinder beide kleiner sind.

Das letzte Element steht nun an seiner richtigen Position.

Danach tauschst du die Wurzel mit dem vorletzten Element und lässt diese wieder einsinken.
und so weiter. und so weiter.

Hoffe, das hilft ein wenig beim Verstehen.
Am besten mal aufzeichnen und nachvollziehen.

Gruß Woyzeck
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Heapsort erklären?

  Alt 5. Jul 2011, 18:46
Und was habe ich jetzt erklärt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Woyzeck

Registriert seit: 9. Jun 2009
60 Beiträge
 
#7

AW: Heapsort erklären?

  Alt 5. Jul 2011, 18:49
Und was habe ich jetzt erklärt?
Bin mir nicht ganz sicher, was dein beschriebener Algorithmus macht.

Jedenfalls habe ich das Video gerade mal grob geschaut und es deckt sich mit meiner Beschreibung.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Heapsort erklären?

  Alt 5. Jul 2011, 18:51
Oder war das Selectionsort, was ich beschrieben habe?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Woyzeck

Registriert seit: 9. Jun 2009
60 Beiträge
 
#9

AW: Heapsort erklären?

  Alt 5. Jul 2011, 18:55
Oder war das Selectionsort, was ich beschrieben habe?
ne, bei selectionsort wird nicht geteilt. Dort sucht man sich ja immer das größte bzw. kleinste Element und fügt es an Anfang bzw. Ende des unsortierten Teils der Liste.

Teilen des Feldes erinnert mich an Quicksort oder Mergesort.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:41 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