# CSC 213 – Large Scale Programming or. Today’s Goals  Begin by discussing basic approach of quick sort  Divide-and-conquer used, but how does this help?

## Presentation on theme: "CSC 213 – Large Scale Programming or. Today’s Goals  Begin by discussing basic approach of quick sort  Divide-and-conquer used, but how does this help?"— Presentation transcript:

CSC 213 – Large Scale Programming or

Today’s Goals  Begin by discussing basic approach of quick sort  Divide-and-conquer used, but how does this help?  Merge sort also divides-and-conquers, what differs?  Show execution tree & discuss meaning for quick sort  Consider selection and important of the pivot  Quick sort rocks for which pivots and why?  If we get really unlucky, when would quick sort suck?  How can we affect choice to insure we get lucky  Given all these facts: is quick sort worth the risk?

Quick (ungraded) Quiz  For what cases does quick sort suck?  When would quick sort execute fastest?  How does quick sort use divide-and-conquer?

Divide-and-Conquer  Like all recursive algorithms, need base case  Has immediate solution to a simple problem  Work is not easy and sorting 2+ items takes work  Already sorted 1 item since it cannot be out of order  Sorting a list with 0 items even easer  Recursive step simplifies problem & combines it  Begins by splitting data into two Sequence s  Combine sub Sequence s once they are sorted

Quick Sort  Divide: Partition by pivot  L has values <= p  G uses values >= p  Recur: Sort L and G  Conquer: Merge L, p, G p

Quick Sort  Divide: Partition by pivot  L has values <= p  G uses values >= p  Recur: Sort L and G  Conquer: Merge L, p, G p

Quick Sort  Divide: Partition by pivot  L has values <= p  G uses values >= p  Recur: Sort L and G  Conquer: Merge L, p, G p L G p

Quick Sort  Divide: Partition by pivot  L has values <= p  G uses values >= p  Recur: Sort L and G  Conquer: Merge L, p, G p p L G p

Quick Sort v. Merge Sort Quick SortMerge Sort  Work mostly splitting data  Cannot guarantee even split  Should skip some comparisons  Does not need extra space  Less work allocating arrays  Blindly merges all the data  Data already in sorted order!  Blindly splits data in half  Always gets even split  Needs * to use other arrays  Wastes time in allocation  Complex workaround exists  Work mostly in merge step  Combines two (sorted) halves  Always skips some comparisons

Execution Tree  Depicts divide-and-conquer execution  Recursive call represented by each oval node  Original Sequence shown at start  At the end of the oval, sorted Sequence shown  Initial call at root of the (binary) tree  Bottom of the tree has leaves for base cases

Execution Example pivot  Each call starts by selecting the pivot 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example pivot  Each call starts by selecting the pivot 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example pivot  Split into L & G partitions around pivot 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example pivot  Split into L & G partitions around pivot 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example  Recursively solve L partition first 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example  Recursively solve L partition first 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example pivot  Select new pivot and split into L & G partitions 2 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example  Recursively solve for L 1  1 2 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example  Recursively solve for L & enjoy base case 1  11  1 2 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example  Now solve for G partition and select pivot 3 4 3  3 41  11  1 2 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example  Recursively solve for L 3 4 3  3 4 1  11  1 2 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example  Recursively solve for L & enjoy base case 3 4 3  3 4 1  11  1 2 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example  Now solve for G & enjoy base case 4  44  4 3 4 3  3 4 1  11  1 2 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9

Execution Example pivot  Add L, pivot, & G to complete previous call 33 4 3  3 4 1  11  1 2 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4

Execution Example pivot  Add L, pivot, & G to complete previous call 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4

Execution Example  Recursively sort G from original call 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4

Execution Example  Recursively sort G from original call 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4 7 9 7  7 7 9

Execution Example pivot  Select pivot & partition into L & G 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4 7 7 9 7  7 7 9

Execution Example  Solve L recursively via base case & move to G 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4 7 7 9 7  7 7 9 7 9  7 9

Execution Example pivot  Select pivot & partition into L & G 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4 7 7 9 7  7 7 9 7 7 9  7 9

Execution Example  Solve through two base cases in L & G 9  99  9 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4 7 7 9 7  7 7 9 7 7 9  7 9

Execution Example pivot  Add L, pivot, & G to complete the call 9  99  9 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4 7 7 9 7  7 7 9 77 7 9  7 9

Execution Example pivot  Add L, pivot, & G to complete the call 9  99  9 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 6 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 4  44  4 77 7 9 7  7 7 9 77 7 9  7 9

Execution Example pivot  Add L, pivot, & G to complete final call 66 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 9  99  9 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 4  44  4 77 7 9 7  7 7 9 77 7 9  7 9

Execution Example only as good as pivot choice  Sorts data, but only as good as pivot choice 66 7 2 9 4 3 7 6 1  1 2 3 4 6 7 7 9 33 4 3  3 4 1  11  1 22 2 4 3 1  1 2 3 4 4  44  4 77 7 9 7  7 7 9 77 7 9  7 9 9  99  9

Q UICK -S ORT ’ S Pivot  Can select any element as pivot existence  Pivot's existence required only, not where or what it is  Q UICK -S ORT ' S ideal pivot is median element  Equal-sized L & G when median element selected  Makes complexity equal to M ERGE -S ORT  Must sort data first to find the median, however  Smallest (or largest element) worst pivot  G (or L ) holds all elements & other partition empty  Complexity becomes equal to I NSERTION -S ORT

Simple Pivot Selection  Could use first (or last) element as pivot  It’s easy to code…  …but also makes sorted data the worst case…  …which is common so this is a really bad idea  Could choose random element as pivot  Little harder to code, but expected to work well  Best is median of first, mid, & last items in list  Nearly eliminates worst case, but much harder to code

For Next Lecture  Week #9 assignment posted so get working  Keep reviewing requirements for program #2  2 nd preliminary deadline coming up so get started  Time developing good tests saves coding time later  Reading on radix sort for Monday  Is it possible to sort without comparisons?  How is radix sort faster than O(n log n) lower bound?

Download ppt "CSC 213 – Large Scale Programming or. Today’s Goals  Begin by discussing basic approach of quick sort  Divide-and-conquer used, but how does this help?"

Similar presentations