Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
CSED233: Data Structures (2014F)
Lecture16: Heap Sort
Bohyung Han
CSE, POSTECH
bhhan@postech.ac.kr
Adding a Node to (Min) Heap
Takes 𝑶 log 𝒏 steps when there are 𝒏 nodes.
• Step 1: Add node at the end
• Step 2: Make swap if parent is
bigger
• Step 3: Continue to swap if
parent is bigger
2
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Delete a Node from (Min) Heap
Takes 𝑶 log 𝒏 steps when there are 𝒏 nodes.
• Step 1: Remove root node
• Step 2: Move last node to root
• Step 3: Make swap if child is
smaller
• Step 4: Make swap if child is
smaller
3
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Priority Queue Sort
• We can use a priority queue to sort a set of elements.
Insert the elements one by one with a series of insert operations.
Remove the elements in sorted order with a series of deleteMax
operations.
Algorithm PQ‐Sort(S, C)
Input sequence S, comparator C for the elements of S
Output sequence S sorted in increasing order according to C
P priority queue with comparator C
while S.isEmpty ()
e S.removeFirst ()
P.insert (e)
while P.isEmpty()
e P.removeMax().getKey()
S.addLast(e)
4
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Priority Queue Sort using a Heap
public void heapSort(int[] A)
{
Heap H = new Heap();
for (int i = 0; i < A.length; i++)
H.insert(A[i]);
𝑂 𝑛 log 𝑛
for (int i = 0; i < A.length; i++)
A[i] = H.deleteMax();
𝑂 𝑛 log 𝑛
}
5
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Convert an unordered array into a heap
6
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Shift up from the root if necessary
7
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
8
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
9
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
10
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
11
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
12
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
13
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
14
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
15
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
16
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
17
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
18
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
19
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
20
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
21
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Insertion Heapifying of an Array
• Continue to shift up until the last node
22
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort
• Given: an unsorted array
• Objective: sort the array
Make unsorted array a heap
Easy to find the maximum (minimum) element in heap
Discard the maximum (minimum) element, easy to find the maximum
(minimum) element in the remaining heap
Repeat until all elements are sorted.
• In‐place algorithm
23
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort Procedure
• Step 1: Make array a heap.
24
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort Procedure
• Step 1: Make array a heap.
25
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort Procedure
• Step 2: Swap the maximum and last number in the heap.
26
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort Procedure
• Step 3: Discard the last item in the heap and heapify the
remaining array.
27
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort Procedure
• Step 2: Swap the maximum and last number in the heap.
28
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort Procedure
• Step 3: Discard the last item in the heap and heapify the
remaining array.
29
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort Procedure
• Repeat swap and heapify operations.
30
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort Procedure
• Repeat swap and heapify operations.
31
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Heap‐Sort
• Consider a priority queue with 𝑛 items implemented by
means of a heap
Space complexity: 𝑂 𝑛
Methods insert and deleteMax: 𝑂 log 𝑛
Methods size, isEmpty, and max: 𝑂 1
• Using a heap‐based priority queue,
We can sort a sequence of 𝑛 elements 𝑂 𝑛 log 𝑛 time.
The resulting algorithm is called heap‐sort.
Heap‐sort is much faster than quadratic sorting algorithms, such as
insertion‐sort and selection‐sort.
32
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
A Faster Heap‐Sort
• Time complexity of insertion
Insert 𝑛 keys one by one taking 𝑂 𝑛 log 𝑛 times.
If we know all keys in advance, we can save the construction to 𝑂 𝑛
times by bottom up construction
• Bottom‐up construction
We can construct a heap storing 𝑛 given keys log 𝑛 with phases.
In phase 𝑖, a pair of heaps with 2𝑖 − 1 keys are merged into a heap
with 2𝑖+1 − 1 keys.
2i -1
2i+1-1
2i -1
33
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Merging Two Heaps
• Procedure
Given two heaps and a key 𝑘, we create a new heap with the root nod
e storing 𝑘 and with the two heaps as subtrees.
We perform downheap to restore the heap-order property
34
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Analysis of Merging
• Shift‐down with a proxy path
Goes right first and then repeatedly goes left until the leaf of the heap
Note: This path may differ from the actual shift‐down path.
Each edge is traversed by at most one proxy path:
• Time complexity
Successive insertions: 𝑂 𝑛 log 𝑛
Bottom‐up construction: 𝑂 𝑛
35
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Time Complexity Comparison
• Comparison to other sorting algorithms
36
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
37