Download presentation
Presentation is loading. Please wait.
Published byClara Louison Modified over 9 years ago
1
CSC 213 – Large Scale Programming or
2
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?
3
Quick (ungraded) Quiz For what cases does quick sort suck? When would quick sort execute fastest? How does quick sort use divide-and-conquer?
4
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
5
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
6
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
7
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
8
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
9
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
10
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
11
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
12
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
13
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
14
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
15
Execution Example Recursively solve L partition first 6 7 2 9 4 3 7 6 1 1 2 3 4 6 7 7 9
16
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
17
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
18
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
19
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
20
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
21
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
22
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
23
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
24
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
25
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
26
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
27
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
28
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
29
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
30
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
31
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
32
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
33
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
34
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
35
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
36
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
37
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
38
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?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.