Heap Sort

  • Uploaded by: mrbkiter
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Heap Sort as PDF for free.

More details

  • Words: 951
  • Pages: 17
Chapter 5 – Part 3: Heaps • A heap is a binary tree structure such that: – The tree is complete or nearly complete. – The key value of each node is >= the key value of each of its descendents (max-heap).

1

Heap Properties • Completeness: Complete tree: N = 2H − 1 (last level is full) H = [log2N] + 1

Nearly complete:

All nodes in the last level are on the left A

B D

A C

B D

A C

E

B D

C E

F 2

Heap Properties • Key value order: 12

24 12

44 18

8 6

23 10

3

Insert Heap • Insert the new node into the bottom level, as far left as possible 12

24 12

44 18

8 6

23 10

• and then reheap-up 4

Basic Heap Operations 42

42

21

32

16 13

12 15

10

21

20

30

32

16

25

13

25 15

10

20

30

12

42

Reheapup

25

32

16 13

21 15

10

20

30

12 5

Delete Heap • replace the deleted value by the value X of the last leaf (rightmost in the last level) • delete the last leaf 78

10

21

32

16 13

12 15

10

20

21 30

16 13

32 12

20

30

15

• and then reheap-up, if X is ≥ its parent, or reheapdown, if X is < either of its children 6

Basic Heap Operations swap with the larger of its children

10 21 16 13

32 12

20

21 30

16

15

13

21 16 13

15

20

30

swap with the larger of its children

30 12

15

10 12

32

Reheapdow n

32

20

10

7

Heap Data Structure • Node i: left child 2i + 1, right 2i +2

78

[0 ]

56 45

[1 ]

[3 ]

32

8

23

[4 ]

[5 ]

[2 ]

• Node i: parent [(i − 1)/2] 19

[6 ]

• Left child j: right sibling j + 1 • Right child j: left sibling j − 1 • Heap size n: first leaf [n/2]

78

56

32

45

8

[0 ]

[1 [2 [3 ] ] ]

[4 ]

23

19

[5 [6 ] ]

• First leaf k: last nonleaf k − 1

8

ReheapUp Algorithm Algorithm reheapUp (ref heap <array>, val newNode ) Reestablishes heap by moving data in child up to its correct location Pre Post

heap is an array containing an invalid heap newNode is index location to new data in heap Heap has been restored

1 if (newNode not 0) 1 parent = (newNode − 1)/2 2 if (heap[newNode].key > heap[parent].key) 1 swap (newNode, parent) 2 reheapup (heap, parent) 2 return End

reheapUp

9

ReheapDown Algorithm Algorithm reheapDown (ref heap <array>, val root , val last ) Reestablishes heap by moving data in root down to its correct location Pre

Post

heap is an array containing an invalid heap root is root of heap last is an index to the last element in heap Heap has been restored

10

ReheapDown Algorithm 1

2

if (root*2 + 1 <= last) 1 leftKey = heap[root*2 + 1].data.key 2 if (root*2 + 2 <= last) 1 rightKey = heap[root*2 + 2].data.key 3 else 1 rightKey = lowKey 4 if (leftKey > rightKey) 1 largeChildKey = leftKey 2 largeChildIndex = root*2 + 1 5 else 1 largeChildKey = rightKey 2 largeChildIndex = root*2 + 2 6 if (heap[root].data.key < heap[largerChildIndex].data.key) 1 swap (root, largerChildIndex) 2 reheapDown (heap, largerChildIndex, last) return

End

reheapDown

11

Build Heap Algorithm buildHeap (ref heap <array>, val size ) Given an array, rearrange data so that it forms a heap Pre Post

heap is an array containing an invalid heap size is number of elements in array array is now a heap

1 walker = 1 2 loop (walker <= size) 1 reheapUp (heap, walker) 2 walker = walker + 1 3 return End

buildHeap

8

19

23

32

45

56

78

78

56

32

45

8

23

19

[0 ]

[1 [2 [3 ] ] ]

[4 ]

[5 [6 ] ] 12

Insert Heap Algorithm

insertHeap (ref heap <array>, ref last val data )

Inserts data into heap Pre

heap is a valid heap last is index to last node in heap Post data have been inserted into heap Return true if successful; false if array is full 1 if (heap full) 1 return false 2 last = last + 1 3 heap[last] = data 4 reheapUp (heap, last) 5 return true End

insertHeap 13

Delete Heap Algorithm

deleteHeap (ref heap <array>, ref last ref dataOut )

Deletes root of heap and passes data back to caller Pre

heap is a valid heap last is index to last node in heap dataOut is reference parameter for output data Post root has been deleted from heap Return true if successful; false if array is empty 1 if (heap empty) 1 return false 2 dataOut = heap[0] 3 heap[0] = heap[last] 4 last = last - 1 5 reheapDown (heap, 0, last) 6 return true End

deleteHeap

14

Complexity of Heap Operations

• ReheapUp: O(log2n)

• ReheapDown: O(log2n) • BuildHeap: O(nlog2n) • InsertHeap: O(log2n) • DeleteHeap: O(log2n) 15

Heap Applications • Selection Algorithms: to determine the kth largest element in an unsorted list – Creat a heap – Delete k - 1 elements from the heap – The desired element will be at the top

16

Heap Applications • Priority Queues: each element has a priority to be dequeued – Use a heap to represent a queue – Elements are enqueued according to their priorities – Top element is dequeued first

17

Related Documents

Heap Sort
May 2020 9
Heap Sort
April 2020 24
Heap Sort
November 2019 15
L09 Heap Tree & Sort
July 2020 5
Heap
May 2020 9
Sort
November 2019 21

More Documents from ""

April 2020 17
April 2020 19
Hashing
April 2020 15
April 2020 7
Heap Sort
April 2020 24