Senior Sanchez
2007-05-07, 18:28:42
Hallo,
Also irgendwie habe ich gerade einen Paul. Wir sollen einen (Min-)Heapsort implementieren und als Test dazu die folgende Zahlenfolge sortieren: 8, 3, 7, 1, 5, 9, 6.
Als erstes lasse ich einen Heap konstruieren (habe ich über ein Einfügen am Anfang und ein durchsickern realisiert): 1 5 3 6 9 7 8
Das ist meiner Ansicht nach ein gültiger Heap, die Heapbedingung (jedes Parent ist kleiner als seine beiden Kinder) ist erfüllt.
Nun geht es los. Das erste Element kann ich direkt entfernen, denn es ist das kleinste. So bleibt 5 3 6 9 7 8. Nun sieht es Heapsort vor, das erste und letzte Element miteinander zu vertauschen und das erste Element dann wiederum durchsickern zu lassen.
5 3 6 9 7 8 --> vertauschen 8 3 6 9 7 5 --> durchsickern lassen 3 7 6 9 8 5
Aber dies ist kein korrekter Heap! 6 ist größer als sein Kind 5, aber trotzdem taucht 6 weiter oben im Heap auf.
Wo liegt mein Fehler?
Also irgendwie habe ich gerade einen Paul. Wir sollen einen (Min-)Heapsort implementieren und als Test dazu die folgende Zahlenfolge sortieren: 8, 3, 7, 1, 5, 9, 6.
Als erstes lasse ich einen Heap konstruieren (habe ich über ein Einfügen am Anfang und ein durchsickern realisiert): 1 5 3 6 9 7 8
Das ist meiner Ansicht nach ein gültiger Heap, die Heapbedingung (jedes Parent ist kleiner als seine beiden Kinder) ist erfüllt.
Nun geht es los. Das erste Element kann ich direkt entfernen, denn es ist das kleinste. So bleibt 5 3 6 9 7 8. Nun sieht es Heapsort vor, das erste und letzte Element miteinander zu vertauschen und das erste Element dann wiederum durchsickern zu lassen.
5 3 6 9 7 8 --> vertauschen 8 3 6 9 7 5 --> durchsickern lassen 3 7 6 9 8 5
Aber dies ist kein korrekter Heap! 6 ist größer als sein Kind 5, aber trotzdem taucht 6 weiter oben im Heap auf.
Wo liegt mein Fehler?