Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Heapsort-Algorithmus
Wahlkurs Informatik (C) MPohlig 2006
2
Die Idee des Heapsort-Algorithmus
Wann ist ein binärer (Teil)baum heap? Rekursive Definition Wir nennen einen Baum im Knoten i dann heap, wenn die Söhne des Knotens nicht größere Werte haben als i und jeder Teilbaum ab dem Knoten i abwärts selbst wieder heap ist. Ein leerer Teilbaum ist a priori heap. Insbesondere erfüllt ein ganzer Baum die heap-Bedingung, wenn er in der Wurzel heap ist. Wahlkurs Informatik (C) MPohlig 2006
3
Die Idee des Heapsort-Algorithmus
Wahlkurs Informatik (C) MPohlig 2006
4
Die Idee des Heapsort-Algorithmus
Wahlkurs Informatik (C) MPohlig 2006
5
Die Idee des Heapsort-Algorithmus
Wahlkurs Informatik (C) MPohlig 2006
6
Die Idee des Heapsort-Algorithmus
Wahlkurs Informatik (C) MPohlig 2006
7
Die Implementierung des Heapsort-Algorithmus
public static void heapSort(int[] liste) { macheHeap(liste); for (int i = liste.length-1; i > 0; i--) { tausche(liste, 0, i); macheHeapFuerKnoten(liste, 0, i-1); } } private static void macheHeap(int[] liste) { for (int i = (liste.length/2); i >= 0; i--) { macheHeapFuerKnoten(liste, i, liste.length-1); } } Wahlkurs Informatik (C) MPohlig 2006
8
Die Implementierung des Heapsort-Algorithmus
private static void macheHeapFuerKnoten(int[] liste, int dieserKnoten, int heapGroesse) { int linkerSohn = 2 * dieserKnoten + 1; int rechterSohn = linkerSohn + 1; int sohn; if (linkerSohn <= heapGroesse && rechterSohn > heapGroesse) { if (liste[linkerSohn] < liste[dieserKnoten]) tausche(liste, linkerSohn, dieserKnoten); } else { if (rechterSohn <= heapGroesse) { sohn = liste[linkerSohn] < liste[rechterSohn] ? linkerSohn : rechterSohn; if (liste[sohn] < liste[dieserKnoten]) { tausche(liste, dieserKnoten, sohn); macheHeapFuerKnoten(liste, sohn, heapGroesse); } } } } Wahlkurs Informatik (C) MPohlig 2006
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.