1Petra Mutzel DAP2 SS08
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
1Petra Mutzel DAP2 SS08
2Petra Mutzel DAP2 SS08
Idee von Heap-SortElemente im unsortierten Array so verschieben,
dass die Heap-Eigenschaft erfüllt ist (CreateHeap)
Wurzel aus Heap entfernen
Heap-Eigenschaften wiederherstellen (Sifting)
Größtes Element im Heap finden ist einfach
Wurzel = erstes Element im Array
3Petra Mutzel DAP2 SS08
4
Betrachte Knoten über den Blättern repariere Teilheap
Bearbeite Baum von unten nach oben Teilbäume sind immer Heaps
CreateHeap
1
2 3
5 6 7
S
R
T I N G
Die Heapbedingung ist
an den Blättern erfüllt.
Beobachtung
Algorithmus O
1 2 3 4 5 6 7
S O IR T N G
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
} }
4
CreateHeap
1
2 3
5 6 7
S
O R
T I N G
procedure CREATEHEAP () { for i := n/2 … 1 {
SIFTDOWN (i, n)} } i
2i 2i+1
1 2 3 4 5 6 7
S O IR T N G
i
2i 2i+1
4
CreateHeap
1
2 3
5 6 7
S
O R
T I N G
1 2 3 4 5 6 7
S O IR T N G
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
} }
procedure CREATEHEAP () { for i := n/2 … 1 {
SIFTDOWN (i, n)} }
4
CreateHeap
1
2 3
5 6 7
S
T R
O I N G
i
1 2 3 4 5 6 7
S T IR O N G
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
} }
procedure CREATEHEAP () { for i := n/2 … 1 {
SIFTDOWN (i, n)} }
Heap-Erstellung beendet
7Petra Mutzel DAP2 SS08
4
HeapSort
1
2 3
5 6 7
T
S R
O I N G
procedure HEAPSORT () {
CREATEHEAP ()
for k := n … 2 {
vertausche A[1] und A[k]
SIFTDOWN (1, k-1)
} }
1 2 3 4 5 6 7
T S IR O N G
k
G
T
TG
8Petra Mutzel DAP2 SS08
4
HeapSort
1
2 3
5 6 7
G
S R
O I N T
1 2 3 4 5 6 7
G S IR O N T
k
S
GO
G
S G GO
procedure HEAPSORT () {
CREATEHEAP ()
for k := n … 2 {
vertausche A[1] und A[k]
SIFTDOWN (1, k-1)
} }
9Petra Mutzel DAP2 SS08
4
HeapSort
1
2 3
5 6 7
S
O R
G I N T
1 2 3 4 5 6 7
S O IR G N T
kS
N
N S
R
R
N
N
procedure HEAPSORT () {
CREATEHEAP ()
for k := n … 2 {
vertausche A[1] und A[k]
SIFTDOWN (1, k-1)
} }
10Petra Mutzel DAP2 SS08
4
HeapSort
1
2 3
5 6 7
R
O N
G I S T
1 2 3 4 5 6 7
R O IN G S T
k
I
R
RI
O
I
IO
procedure HEAPSORT () {
CREATEHEAP ()
for k := n … 2 {
vertausche A[1] und A[k]
SIFTDOWN (1, k-1)
} }
11Petra Mutzel DAP2 SS08
4
HeapSort
1
2 3
5 6 7
O
I N
G R S T
1 2 3 4 5 6 7
O I RN G S T
k
G
O
OG
N
G
N G
procedure HEAPSORT () {
CREATEHEAP ()
for k := n … 2 {
vertausche A[1] und A[k]
SIFTDOWN (1, k-1)
} }
12Petra Mutzel DAP2 SS08
HeapSort
1
2 3
5 6 7
N
I G
O R S T
1 2 3 4 5 6 7
N I RG O S T
k
N
G
NG
I
G
I G
4
procedure HEAPSORT () {
CREATEHEAP ()
for k := n … 2 {
vertausche A[1] und A[k]
SIFTDOWN (1, k-1)
} }
13Petra Mutzel DAP2 SS08
4
HeapSort
1
2 3
5 6 7
I
G N
O R S T
1 2 3 4 5 6 7
I G RN O S T
k
I
G
IG
procedure HEAPSORT () {
CREATEHEAP ()
for k := n … 2 {
vertausche A[1] und A[k]
SIFTDOWN (1, k-1)
} }
14Petra Mutzel DAP2 SS08
Ende der Animation
Top Related