1Petra Mutzel DAP2 SS08 Beispielanimation Heap-Sort Professor Dr. Petra Mutzel Lehrstuhl für...

Preview:

Citation preview

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

Recommended