@ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort...

70
@ Zhigang Zhu, 2004- 2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department of Computer Science City College of New York
  • date post

    19-Dec-2015
  • Category

    Documents

  • view

    214
  • download

    1

Transcript of @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort...

Page 1: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 1

CSC212 Data Structure - Section FG

CSC212 Data Structure - Section FG

Lecture 22

Recursive Sorting, Heapsort &

STL Quicksort

Instructor: Zhigang Zhu

Department of Computer Science

City College of New York

Page 2: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 2

TopicsTopics

Recursive Sorting Algorithms Divide and Conquer technique

An O(NlogN) Sorting Alg. using a Heap making use of the heap properties

STL Sorting Functions C++ sort function Original C version of qsort

Page 3: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 3

The Divide-and-Conquer TechniqueThe Divide-and-Conquer Technique

Basic Idea: If the problem is small, simply solve it. Otherwise,

divide the problem into two smaller sub-problems, each of which is about half of the original problem

Solve each sub-problem, and then Combine the solutions of the sub-problems

Page 4: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 4

The Divide-and-Conquer Sorting ParadigmThe Divide-and-Conquer Sorting Paradigm

1. Divide the elements to be sorted into two groups of (almost) equal size

2. Sort each of these smaller groups of elements (by recursive calls)

3. Combine the two sorted groups into one large sorted list

Page 5: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 5

MergesortMergesort

Divide the array in the middle

Sort the two half-arrays by recursion

Merge the two halves

void mergesort(int data[ ], size_t n){ size_t n1; // Size of the first subarray size_t n2; // Size of the second subarray

if (n > 1) { // Compute sizes of the subarrays. n1 = n / 2; n2 = n - n1;

// Sort from data[0] through data[n1-1] mergesort(data, n1); // Sort from data[n1] to the end mergesort((data + n1), n2);

// Merge the two sorted halves. merge(data, n1, n2); }}

Page 6: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 6

Mergesort – an ExampleMergesort – an Example

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

Page 7: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 7

Mergesort – an ExampleMergesort – an Example

2 3 6 7 10 12 16 18

16 12 7 6 3 2 18 10

?

Page 8: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 8

Mergesort – an ExampleMergesort – an Example

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10divide

Page 9: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 9

Mergesort – an ExampleMergesort – an Example

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

divide

divide

Page 10: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 10

Mergesort – an ExampleMergesort – an Example

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

divide

divide

divide

Page 11: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 11

Mergesort – an ExampleMergesort – an Example

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

12 16 6 7 2 3 10 18

16 12 7 6 3 2 18 10

divide

divide

divide

merge

Page 12: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 12

Mergesort – an ExampleMergesort – an Example

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

12 16 6 7 2 3 10 18

16 12 7 6 3 2 18 10

6 7 12 16 2 3 10 18

divide

divide

divide

merge

merge

Page 13: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 13

Mergesort – an ExampleMergesort – an Example

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

12 16 6 7 2 3 10 18

16 12 7 6 3 2 18 10

6 7 12 16 2 3 10 18

2 3 6 7 10 12 16 18

divide

divide

divide

merge

merge

merge

Page 14: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 14

Mergesort – two issuesMergesort – two issues

Specifying a subarray with pointer arithmetic int data[10]; (data+i)[0] is the same of data[i] (data+i][1] is the same as data[i+1]

Merging two sorted subarrays into a sorted list need a temporary array (by new and then delete) step through the two sub-arrays with two cursors,

and copy the elements in the right order

Page 15: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 15

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

? ? ? ? ? ? ? ?

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 16: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 16

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

2 ? ? ? ? ? ? ?

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 17: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 17

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

2 3 ? ? ? ? ? ?

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 18: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 18

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

2 3 6 ? ? ? ? ?

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 19: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 19

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

2 3 6 7 ? ? ? ?

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 20: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 20

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

2 3 6 7 10 ? ? ?

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 21: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 21

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

2 3 6 7 10 12 ? ?

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 22: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 22

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

2 3 6 7 10 12 16 ?

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 23: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 23

Mergesort - mergeMergesort - merge

6 7 12 16 2 3 10 18

2 3 6 7 10 12 16 18

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

c1 c2

d

Page 24: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 24

Mergesort - mergeMergesort - merge

2 3 6 7 10 12 16 18

data

temp

[0] [1] [2] [3] [4] [5] [6] [7]

[0] [1] [2] [3] [4] [5] [6] [7]

2 3 6 7 10 12 16 18

Page 25: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 25

Mergesort - mergeMergesort - merge

data

[0] [1] [2] [3] [4] [5] [6] [7]

2 3 6 7 10 12 16 18

Page 26: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 26

    void merge(int data[ ], size_t n1, size_t n2)     // Precondition: The first n1 elements of data are sorted, and the     // next n2 elements of data are sorted (from smallest to largest).    // Postcondition: The n1+n2 elements of data are now completely sorted.

QUIZ

Page 27: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 27

Mergesort – Time AnalysisMergesort – Time Analysis

The worst-case running time, the average-case running time and the best-case running time for mergesort are all O(n log n)

Page 28: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 28

Mergesort – an ExampleMergesort – an Example

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

16 12 7 6 3 2 18 10

12 16 6 7 2 3 10 18

16 12 7 6 3 2 18 10

6 7 12 16 2 3 10 18

2 3 6 7 10 12 16 18

divide

divide

divide

merge

merge

merge

Page 29: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 29

Mergesort – Time AnalysisMergesort – Time Analysis

At the top (0) level, 1 call to merge creates an array with n elements At the 1st level, 2 calls to merge creates 2 arrays, each with n/2 elements At the 2nd level, 4 calls to merge creates 4 arrays, each with n/4 elements At the 3rd level, 8 calls to merge creates 8 arrays, each with n/8 elements

At the dth level, 2d calls to merge creates 2d arrays, each with n/2d elements

Each level does total work proportional to n => c n, where c is a constant Assume at the dth level, the size of the subarrays is n/2d =1, which means all the

work is done at this level, therefore the number of levels d = log2 n

The total cost of the mergesort is c nd = c n log2 n therefore the Big-O is O(n log2 n)

Page 30: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 30

HeapsortHeapsort

Heapsort – Why a Heap? (two properties) Hepasort – How to? (two steps) Heapsort – How good? (time analysis)

Page 31: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 31

Heap DefinitionHeap Definition

A heap is a binary tree where the entries of the nodes can be compared with the less than operator of a strict weak ordering.

In addition, two rules are followed: The entry contained by the node is NEVER less

than the entries of the node’s children The tree is a COMPLETE tree.

Page 32: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 32

Why a Heap for Sorting?Why a Heap for Sorting?

Two properties The largest element is always at the root Adding and removing an entry from a heap is

O(log n)

Page 33: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 33

Heapsort – Basic IdeaHeapsort – Basic Idea

Step 1. Make a heap from elements add an entry to the heap one at a time reheapification upward n times – O(n log n)

Step 2. Make a sorted list from the heap Remove the root of the heap to a sorted list and Reheapification downward to re-organize into a

updated heap n times – O(n log n)

Page 34: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 34

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

Page 35: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 35

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

16

Page 36: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 36

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

16

12

Page 37: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 37

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

16

12 7

Page 38: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 38

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

16

12 7

6

Page 39: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 39

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

16

12 7

6 3

Page 40: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 40

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

16

12 7

6 3 2

Page 41: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 41

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 7 6 3 2 18 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

16

12 7

6 3 2 18

reheapification upward: push the out-of-place node upward

Page 42: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 42

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

16 12 18 6 3 2 7 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

16

12 18

6 3 2 7

reheapification upward: push the out-of-place node upward

Page 43: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 43

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

18 12 16 6 3 2 7 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

18

12 16

6 3 2 7

reheapification upward: push the out-of-place node upward until it is in the right place

Page 44: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 44

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

18 12 16 6 3 2 7 10

[0] [1] [2] [3] [4] [5] [6] [7]

add an entry to the heap one at a time

18

12 16

6 3 2 7

10

reheapification upward: push the out-of-place node upward until it is in the right place

Page 45: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 45

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

add an entry to the heap one at a time

18

12 16

10 3 2 7

6

reheapification upward: push the out-of-place node upward until it is in the right place

18 12 16 10 3 2 7 6

[0] [1] [2] [3] [4] [5] [6] [7]

Page 46: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 46

Heapsort – Step 1: Make a HeapHeapsort – Step 1: Make a Heap

A heap is created: it is saved in the original array- the tree on the right is only for illustration!

18

12 16

10 3 2 7

6

18 12 16 10 3 2 7 6

[0] [1] [2] [3] [4] [5] [6] [7]

Sorted???

Page 47: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 47

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

18

12 16

10 3 2 7

6

18 12 16 10 3 2 7 6

[0] [1] [2] [3] [4] [5] [6] [7]

heap ->

sorted list from smallest to largest

Q: where is the largest entry?

Page 48: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 48

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

18

12 16

10 3 2 7

6

18 12 16 10 3 2 7 6

[0] [1] [2] [3] [4] [5] [6] [7]

Idea: remove the root of the heap and place it in the sorted list

=> recall: how to remove the root?

Page 49: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 49

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

6

12 16

10 3 2 7

6 12 16 10 3 2 7 18

[0] [1] [2] [3] [4] [5] [6] [7]

How to remove the root?

move the last entry in the root...

and for the sake of sorting, put the root entry in the “sorted side”

almost a heap... sorted side

Page 50: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 50

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

6

12 16

10 3 2 7

6 12 16 10 3 2 7 18

[0] [1] [2] [3] [4] [5] [6] [7]

How to remove the root?

move the last entry in the root...

then reposition the out-of place node to update the heap

sorted sidealmost a heap...

Page 51: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 51

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

16

12 6

10 3 2 7

16 12 6 10 3 2 7 18

[0] [1] [2] [3] [4] [5] [6] [7]

How to remove the root?

move the last entry in the root...

then reposition the out-of place node to update the heap

sorted side

reheapification downward

almost a heap...

Page 52: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 52

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

16

12 7

10 3 2 6

16 12 7 10 3 2 6 18

[0] [1] [2] [3] [4] [5] [6] [7]

How to remove the root?

move the last entry in the root...

then reposition the out-of place node to update the heap

sorted side

reheapification downward

a heap in the unsorted side

Page 53: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 53

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

16

12 7

10 3 2 6

16 12 7 10 3 2 6 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidea heap in the unsorted side

Page 54: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 54

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

6

12 7

10 3 2

6 12 7 10 3 2 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidealmost a heap...

Page 55: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 55

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

12

6 7

10 3 2

12 6 7 10 3 2 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidealmost a heap...

Page 56: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 56

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

12

10 7

6 3 2

12 10 7 6 3 2 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidealmost a heap...

Page 57: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 57

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

12

10 7

6 3 2

12 10 7 6 3 2 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidea heap again!

Page 58: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 58

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

2

10 7

6 3

2 10 7 6 3 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidealmost a heap...

Page 59: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 59

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

10

2 7

6 3

10 2 7 6 3 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidealmost a heap...

Page 60: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 60

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

10

6 7

2 3

10 6 7 2 3 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidea heap again!

Page 61: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 61

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

3

6 7

2

3 6 7 2 10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidealmost a heap...

Page 62: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 62

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

7

6 3

2

7 6 3 2 10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidea heap again !

Page 63: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 63

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

2

6 3

2 6 3 7 10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

a heap ?? sorted side

Page 64: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 64

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

6

2 3

6 2 3 7 10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sidea heap !!

Page 65: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 65

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

3

2

3 2 6 7 10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sideheap !

Page 66: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 66

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

2 2 3 6 7 10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted sideheap !

Page 67: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 67

Heapsort – Step 2: Sorting from HeapHeapsort – Step 2: Sorting from Heap

2 3 6 7 10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

do the same thing again for the heap in the unsorted side until all the entries have been moved to the sorted side

sorted side

DONE!

Page 68: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 68

Heapsort – Time AnalysisHeapsort – Time Analysis

Step 1. Make a heap from elements add an entry to the heap one at a time reheapification upward n times – O(n log n)

Step 2. Make a sorted list from the heap Remove the root of the heap to a sorted list and Reheapification downward to re-organize the unsorted

side into a updated heap do this n times – O(n log n)

The running time is O(n log n)

Page 69: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 69

C++ STL Sorting FunctionsC++ STL Sorting Functions

The C++ sort function void sort(Iterator begin, Iterator end);

The original C version of qsortvoid qsort(

void *base,

size_t number_of_elements,

size_t element_size,

int compare(const void*, const void*)

);

Page 70: @ Zhigang Zhu, 2004-2014 1 CSC212 Data Structure - Section FG Lecture 22 Recursive Sorting, Heapsort & STL Quicksort Instructor: Zhigang Zhu Department.

@ Zhigang Zhu, 2004-2014 70

Summary & HomeworkSummary & Homework

Recursive Sorting Algorithms Divide and Conquer technique

An O(NlogN) Sorting Alg. using a Heap making use of the heap properties

STL Sorting Functions C++ sort function Original C version of qsort

Homework use your heap implementation to implement a heapsort!