Beispielanimation Heap-Sort Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund Teil der 7. VO DAP2 SS 2008 29. April 2008 Petra Mutzel DAP2 SS08 1
Idee von Heap-Sort Elemente im unsortierten Array so verschieben, dass die Heap-Eigenschaft erfüllt ist (CreateHeap) Größtes Element im Heap finden ist einfach Wurzel = erstes Element im Array Wurzel aus Heap entfernen Heap-Eigenschaften wiederherstellen (Sifting)
CreateHeap Beobachtung S O R Algorithmus T I N G S O R T I N G Die Heapbedingung ist an den Blättern erfüllt. S 1 O R 2 Algorithmus 3 Betrachte Knoten über den Blättern repariere Teilheap Bearbeite Baum von unten nach oben Teilbäume sind immer Heaps T I N G 4 5 6 7 1 2 3 4 5 6 7 S O R T I N G
CreateHeap S i O R T I N G 2i 2i+1 S O R T I N G procedure CREATEHEAP () { for i := n/2 … 1 { SIFTDOWN (i, n) } } S 1 i procedure SIFTDOWN (i, m) { while Knoten i hat Kinder ≤ m { j := Kind ≤ m mit größerem Wert if A[i] < A[j] then { vertausche A[i] und A[j] i := j } else return } } O R 2 3 T I N G 4 5 6 7 2i 2i+1 1 2 3 4 5 6 7 S O R T I N G
CreateHeap S i O R T I N G 2i 2i+1 S O R T I N G procedure CREATEHEAP () { for i := n/2 … 1 { SIFTDOWN (i, n) } } S 1 i procedure SIFTDOWN (i, m) { while Knoten i hat Kinder ≤ m { j := Kind ≤ m mit größerem Wert if A[i] < A[j] then { vertausche A[i] und A[j] i := j } else return } } O R 2 3 T I N G 4 5 6 7 2i 2i+1 1 2 3 4 5 6 7 S O R T I N G
Heap-Erstellung beendet CreateHeap Heap-Erstellung beendet procedure CREATEHEAP () { for i := n/2 … 1 { SIFTDOWN (i, n) } } i S 1 j procedure SIFTDOWN (i, m) { while Knoten i hat Kinder ≤ m { j := Kind ≤ m mit größerem Wert if A[i] < A[j] then { vertausche A[i] und A[j] i := j } else return } } T R 2 3 O I N G 4 5 6 7 1 2 3 4 5 6 7 S T R O I N G
HeapSort T G S R k O I N T G G T S R O I N G T procedure HEAPSORT () { CREATEHEAP () for k := n … 2 { vertausche A[1] und A[k] SIFTDOWN (1, k-1) } } T G 1 S R 2 3 k O I N T G 4 5 6 7 1 2 3 4 5 6 7 G T S R O I N G T
HeapSort S G S O G R k G O I N T S G G S O R O G I N T procedure HEAPSORT () { CREATEHEAP () for k := n … 2 { vertausche A[1] und A[k] SIFTDOWN (1, k-1) } } S G 1 S O G R 2 3 k G O I N T 4 5 6 7 1 2 3 4 5 6 7 S G G S O R O G I N T
HeapSort S R N O N R k G I S N T R N S O N R G I N S T procedure HEAPSORT () { CREATEHEAP () for k := n … 2 { vertausche A[1] und A[k] SIFTDOWN (1, k-1) } } S R N 1 O N R 2 3 k G I S N T 4 5 6 7 1 2 3 4 5 6 7 R N S O N R G I N S T
HeapSort R I O O I N k G R I S T O I R I O N G R I S T procedure HEAPSORT () { CREATEHEAP () for k := n … 2 { vertausche A[1] und A[k] SIFTDOWN (1, k-1) } } R I O 1 O I N 2 3 k G R I S T 4 5 6 7 1 2 3 4 5 6 7 O I R I O N G R I S T
HeapSort G O N I N G k O G R S T N G O I G N G O R S T procedure HEAPSORT () { CREATEHEAP () for k := n … 2 { vertausche A[1] und A[k] SIFTDOWN (1, k-1) } } G O N 1 I N G 2 3 k O G R S T 4 5 6 7 1 2 3 4 5 6 7 N G O I G N G O R S T
HeapSort G I N k I G G N O R S T I G N G I N G O R S T procedure HEAPSORT () { CREATEHEAP () for k := n … 2 { vertausche A[1] und A[k] SIFTDOWN (1, k-1) } } G I N 1 k I G G N 2 3 O R S T 4 5 6 7 1 2 3 4 5 6 7 I G N G I N G O R S T
HeapSort I G k I G N O R S T I G I G N O R S T procedure HEAPSORT () { CREATEHEAP () for k := n … 2 { vertausche A[1] und A[k] SIFTDOWN (1, k-1) } } I G 1 k I G N 2 3 O R S T 4 5 6 7 1 2 3 4 5 6 7 I G I G N O R S T
Ende der Animation