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 Roadmap • 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 tight code, subquadratic 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 • Download hw4.pdf from our course homepage • Due on Oct. 11 • Watch the week#4 video of Algorithm(Part I) Coursera. • Optional: Programming Assignment 4 4/8/2015 Xiaojuan Cai 29