lecture 3 heap sort and quick sort - umass amherst 241 f19 lecture 3.pdf · lecture 3 heap sort and...

42
Lecture 3 Heap Sort and Quick Sort ECE 241 – Adv. Programming I Fall 2019 Mike Zink

Upload: others

Post on 22-May-2020

26 views

Category:

Documents


0 download

TRANSCRIPT

Lecture3HeapSortandQuickSort

ECE241– Adv.ProgrammingIFall2019MikeZink

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Overview

1

• HeapSort• QuickSort

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Objective

• Learnhowperformance ofMergesortcanbefurther improvedbyusingHeapsortandQuicksort

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heap Sort

3

• Use“heap”datastructure tomanageinformation

• Makesalsoanefficientpriorityqueue (morelaterinthesemester)

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Binary Heap

4

8

4

2 4

8 9

14

2

7

5

1

10

9

610

3

3

7

16

1

16

1

14

2

10

3

8

4

7

5

9

6

3

7

2

8

4

9

1

10

ValueIndex

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Binary Heap

5

• Represent treeassinglelist:• Root oftreeisA[1],withindexi ofnode

• PARENT(i)return ⌊i/2⌋

• Left(i)return 2i

• Right(i)return 2i +1

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Max-heap

6

• A[PARENT(i)] ≥ A[i]:Valueofnode i isatmostvalueofitsparent

• Largestvaluestoredatroot• Subtreerootedatnodecontainsnovalueslagerthanvalueofnodeitself

• UsedforHeapsort

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Min-Heap

7

• A[PARENT(i)] ≤ A[i]• Smallestvaluestoredatroot• Subtreerootedatnodecontainsnovaluessmallerthanvalueofnodeitself

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Max-Heapify

8

14

4

2 8

8 9

4

2

7

5

1

10

9

610

3

3

7

16

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Max-Heapify

9

4

4

2 8

8 9

14

2

7

5

1

10

9

610

3

3

7

16

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Max-Heapify

10

8

4

2 4

8 9

14

2

7

5

1

10

9

610

3

3

7

16

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Max-Heapify

11

Max-Heapify(A,i)1 l ⃪ LEFT(i)

2 r ⃪ RIGHT(i)

3 ifl≤ heap-size[A]andA[l]>A[i]

4 thenlargest⃪ l

5 elselargest⃪ i

6 ifr≤ heap-size[A]andA[r]>A[largest]

7 thenlargest⃪ r

8 iflargest≠i

9 thenexchangeA[i]⟷ A[largest]

10 MAX-HEAPIFY(A,largest)

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Building a Heap

12

Build-Max-Heap(A) 1 heap-size[A]⃪ length[A]

2 forI⃪ ⌊length[A]/2⌋ downto 1

3 doMAX-HEAPIFY(A,i)

4 1 3 2 16 9 10 14 8 7

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Building a Heap: Example

13

2

4

14 8

8 9

1

2

16

5

7

10

9

63

3

10

7

4

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Building a Heap: Example

14

2

4

14 8

8 9

1

2

16

5

7

10

9

63

3

10

7

4

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Building a Heap: Example

15

14

4

2 8

8 9

1

2

16

5

7

10

9

63

3

10

7

4

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Building a Heap: Example

16

14

4

2 8

8 9

1

2

16

5

7

10

9

610

3

3

7

4

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Building a Heap: Example

17

14

4

2 8

8 9

16

2

7

5

1

10

9

610

3

3

7

4

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Building a Heap: Example

18

8

4

2 4

8 9

14

2

7

5

1

10

9

610

3

3

7

16

1

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm

19

HeapSort(A) 1 BUILD-MAX-HEAP(A)

2 fori ⃪ length[A]downto 2

3 doexchangeA[1]⟷ A[i]

4 heap-size[A]⃪ heap-size[A]– 1

5 MAX-HEAPIFY(A,1)

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (i)

20

8

4

2 4

8 9

14

2

7

5

1

10

9

610

3

3

7

16

1

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (ii)

21

4

4

2 1

8 9

8

2

7

5

16

10

9

610

3

3

7

14

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (iii)

22

4

4

2 14

8 9

8

2

7

5

16

10

1

69

3

3

7

10

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (iv)

23

4

4

10 14

8 9

8

2

7

5

16

10

1

63

3

2

7

9

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (v)

24

4

4

10 14

8 9

7

2

2

5

16

10

1

63

3

9

7

8

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (vi)

25

1

4

10 14

8 9

4

2

2

5

16

10

8

63

3

9

7

7

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (vii)

26

1

4

10 14

8 9

2

2

7

5

16

10

8

63

3

9

7

4

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (viii)

27

4

4

10 14

8 9

2

2

7

5

16

10

8

61

3

9

7

3

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (iv)

28

4

4

10 14

8 9

1

2

7

5

16

10

8

63

3

9

7

2

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort Algorithm: Example (x)

29

4

4

10 14

8 9

2

2

7

5

16

10

8

63

3

9

7

2

1

i

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Heapsort – Analysis

30

• Heapsort takestimeO(nlogn)• BUILD-MAX-HEAP takestimeO(n)• MAX-HEAPIFY takestimeO(logn)

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort

31

• UsesdivideandconquerasinMergeSort• NoADDITIONAL storageusage=>overcomesMergeSortweakness

• Trade-off: Performance diminished iflistcanbedividedinhalf

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort – Pivot Value

32

1. SelectPivotValue:• Simplyfirstiteminlist

• Assistwithsplittinglist• Splitpoint usedtodividelistforsubsequent calls

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort – Partitioning

33

2. Partitioning:• Setleftmark andrightmark

• Moveitemsto”right”sideofpivotvalue

• Convergesplitpoint

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort – Exchange Pivot

34

3. ExchangePivot:• Stopwhenrightmark <=leftmark• Moveitemsto”right”sideofpivotvalue• Convergesplitpoint• QuickSortforleft- andrighthalf

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort – Implementation

35

def quickSort(alist):quickSortHelper(alist,0,len(alist)-1)

def quickSortHelper(alist,first,last):if first<last:

splitpoint = partition(alist,first,last)

quickSortHelper(alist,first,splitpoint-1)quickSortHelper(alist,splitpoint+1,last)

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort – Implementation

36

def partition(alist,first,last):pivotvalue = alist[first]

leftmark = first+1rightmark = last

done = Falsewhile not done:

while leftmark <= rightmark and alist[leftmark] <= pivotvalue: leftmark = leftmark + 1

while alist[rightmark] >= pivotvalue and rightmark >= leftmark:rightmark = rightmark -1

if rightmark < leftmark: done = True else: temp = alist[leftmark]

alist[leftmark] = alist[rightmark]alist[rightmark] = temp

temp = alist[first]alist[first] = alist[rightmark]alist[rightmark] = temp

return rightmark

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort – Implementation

37

alist = [54,26,93,17,77,31,44,55,20]quickSort(alist)print(alist)

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort – Analysis

38

• logndivisions, ifpartitionsoccuralwaysinmiddleoflist

• nitemstocheckagainstpivotvaluetofindsplitpoint• =>nlogn• Noadditionalmemory requirements

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Quick Sort – Analysis (Worst Case)

39

• Splitpointsnotinthemiddle,skewed toleftorright• =>sortingalistof0andn-1 items,then0andn-2,andsoon

• Results inO(n2)plusoverhead requiredbyrecursion• Medianofthethree:pivotvalueismedianvalueoffirst,middle,andlastelement=>chooseabetter“middlevalue”

ECE 241 – Adv. Programming I Fall 2019 © 2019 Mike Zink

Next Steps

40

• NextlectureonThursday• DiscussiononThursday• Homework1dueonThursday at11PM

ECE 241 – Data Structures Fall 2018 © 2018 Mike Zink41