# Document ```Lecture 4 Sort(2)
• Merge sort
• Quick sort
ACKNOWLEDGEMENTS: Some contents in this lecture source from COS226 of Princeton University
by Kevin Wayne and Bob Sedgewick
• Merge sort
• Quick sort
Merge sort
Merge sort
• Divide array into two halves.
• Recursively sort each half.
• Merge two halves.
2
13
6
24 43
2
13
6
24
2
6
13
24
1
1
43
1
1
2
6
9
10
51
10
13
24
9
10
9
10
10
51
43
51
43
51
Merging
2, 13, 43, 45, 89
6, 24, 51, 90, 93
2, 6, 13, 24, 43, 45, 51, 89, 90, 93
Assume we need to merge two sorted arrays, with M, N
elements respectively. Then
•
•
How many comparisons in best case?
How many comparisons in worst case?
A. M+N
B. max{M,N}
C. min{M,N}
D. M+N-1
Complexity
• Laptop executes 108 compares/second.
• Supercomputer executes 1012 compares/second.
insertion sort (N2)
mergesort (N log N)
computer
thousand
million
billion
thousand
million
billion
home
instant
2.8
hours
317 years
instant
1
second
18 min
super
instant
1
second
1 week
instant
instant
instant
Good algorithms are better than supercomputers.
Discussion
• Mergesort is
• stable?
• in place?
• Recursions cost spaces.
Bottom-up merge sort
1
2
6
9
1
2
6
9
2
6
13
2
13
2
13
10
13
24
43
51
13
24
43
51
10
24
1
9
43
51
10
6
24
1
43
9
51
10
6
24
43
1
51
9
10
Quiz
Give the array that results immediately after the
7th call to merge() by using:
a) top-down mergesort
b) bottom-up merge sort
MBXVZYHUNSIK
A. B M V X Y Z H N U S I K
B. B M V X Y Z H N U S K I
C. B M V X Y Z H U N S I K
D. B M V X Y Z H N U S K I
Quiz
Mergesort, BottomupMergesort,
which one is more efficient?
which one is easier for understanding and
debugging?
which one you prefer?
A. Mergesort
B. BottomupMergesort
Where are we?
• Merge sort
• Quick sort
Quick sort
Quicksort honored as one of top 10 algorithms of 20th
century in science and engineering.
Mergesort.
• Java sort for objects.
• Perl, C++ stable sort, Python stable sort, Firefox
JavaScript, ...
Quicksort.
• Java sort for primitive types.
• C qsort, Unix, Visual C++, Python, Matlab, Chrome
JavaScript, ...
Quick sort
Sir Charles Antony
Richard Hoare
1980 Turing Award
Quick sort
• Shuffle the array.
• Partition so that, for some j
- entry a[ j] is in place
- no larger entry to the left of j
- no smaller entry to the right of j
• Sort each piece recursively.
Partition#1
Partition#1
10
13
i
j
6
24
43
1
51
9
Partition #2
- by Sedgewick
Complexity
Best case: array always split into two equal-sized subarrays.
similar to mergesort, O(NlogN)
Worst case: array always split into a 0-sized and an N-1-sized
subarrays
similar to selection sort, O(N2)
Average case:
Complexity
• Laptop executes 108 compares/second.
• Supercomputer executes 1012 compares/second.
insertion sort (N2)
compute thous million
r
and
2.8
hours
billion
home
instan
t
317
years
super
instan
1
1 week
t
second
mergesort (N log N)
quicksort (N log N)
thousan million billion thousan millio
d
d
n
instant
1
second
18
min
instant
instant
instant
instan
t
instant
Good algorithms are better than
supercomputers.
Great algorithms are better than good
algorithms.
0.6
sec
billion
12 min
instan
instant
t
Duplicate keys
B A A B A B B B C C C
A A A A A A A A A A A
Dijkstra’s 3-way partition
Quiz
Give the array that results after applying quicksort
partitioning to the following array by using:
a) partition #1
b) partition #2
c) Dijkstra’s 3-way partition
HJBRHRHBCVS
A. C B H H B H R J R V S
B. H C B B H H R R J V S
C. C B B H H H R R V S J
D. none of above
Sort summary
inplace?
stable?
worst
average
N
2
/2
N
2
/2
N
2
/2
N
2
/4
selection
x
insertion
x
shell
x
quick
x
N
2
3-way quick
x
N
2
merge
x
?
x
/2
/2
N lg N
?
2 N ln N
best
N
2
/2
remarks
N exchanges
N
use for small N or partially ordered
N
N lg N
2 N ln N
N
N lg N
N lg N
N log N probabilistic guarantee
fastest in practice
improves quicksort in presence
of duplicate keys
N log N guarantee, stable
Exercise