EE 312 Software Design and Implementation I

Slides:



Advertisements
Similar presentations
Chapter 9 continued: Quicksort
Advertisements

Algorithms Analysis Lecture 6 Quicksort. Quick Sort Divide and Conquer.
Quick Sort, Shell Sort, Counting Sort, Radix Sort AND Bucket Sort
Chapter 4: Divide and Conquer Master Theorem, Mergesort, Quicksort, Binary Search, Binary Trees The Design and Analysis of Algorithms.
QuickSort 4 February QuickSort(S) Fast divide and conquer algorithm first discovered by C. A. R. Hoare in If the number of elements in.
Quicksort CS 3358 Data Structures. Sorting II/ Slide 2 Introduction Fastest known sorting algorithm in practice * Average case: O(N log N) * Worst case:
25 May Quick Sort (11.2) CSE 2011 Winter 2011.
Quicksort COMP171 Fall Sorting II/ Slide 2 Introduction * Fastest known sorting algorithm in practice * Average case: O(N log N) * Worst case: O(N.
Chapter 7: Sorting Algorithms
1 Today’s Material Divide & Conquer (Recursive) Sorting Algorithms –QuickSort External Sorting.
CS 201 Data Structures and Algorithms Text: Read Weiss, § 7.7
Quicksort, Mergesort, and Heapsort. Quicksort Fastest known sorting algorithm in practice  Caveats: not stable  Vulnerable to certain attacks Average.
Insertion Sort Merge Sort QuickSort. Sorting Problem Definition an algorithm that puts elements of a list in a certain order Numerical order and Lexicographical.
Quicksort Divide-and-Conquer. Quicksort Algorithm Given an array S of n elements (e.g., integers): If array only contains one element, return it. Else.
Fundamentals of Algorithms MCS - 2 Lecture # 16. Quick Sort.
CS 206 Introduction to Computer Science II 12 / 09 / 2009 Instructor: Michael Eckmann.
Quicksort. Quicksort I To sort a[left...right] : 1. if left < right: 1.1. Partition a[left...right] such that: all a[left...p-1] are less than a[p], and.
Quicksort. 2 Introduction * Fastest known sorting algorithm in practice * Average case: O(N log N) * Worst case: O(N 2 ) n But, the worst case seldom.
Quicksort.
Quicksort.
Quicksort
Chapter 7 (Part 2) Sorting Algorithms Merge Sort.
Sorting II/ Slide 1 Lecture 24 May 15, 2011 l merge-sorting l quick-sorting.
Sorting (Part II: Divide and Conquer) CSE 373 Data Structures Lecture 14.
1 Data Structures and Algorithms Sorting. 2  Sorting is the process of arranging a list of items into a particular order  There must be some value on.
CSC – 332 Data Structures Sorting
Quicksort, Mergesort, and Heapsort. Quicksort Fastest known sorting algorithm in practice  Caveats: not stable  Vulnerable to certain attacks Average.
1 Sorting Algorithms Sections 7.1 to Comparison-Based Sorting Input – 2,3,1,15,11,23,1 Output – 1,1,2,3,11,15,23 Class ‘Animals’ – Sort Objects.
1 Heapsort, Mergesort, and Quicksort Sections 7.5 to 7.7.
QuickSort. Yet another sorting algorithm! Usually faster than other algorithms on average, although worst-case is O(n 2 ) Divide-and-conquer: –Divide:
Intro. to Data Structures Chapter 7 Sorting Veera Muangsin, Dept. of Computer Engineering, Chulalongkorn University 1 Chapter 7 Sorting Sort is.
Algorithm Design Techniques, Greedy Method – Knapsack Problem, Job Sequencing, Divide and Conquer Method – Quick Sort, Finding Maximum and Minimum, Dynamic.
Advanced Sorting.
Divide and Conquer Sorting
Quicksort
Divide-And-Conquer-And-Combine
Quick-Sort 9/13/2018 1:15 AM Quick-Sort     2
Chapter 7 Sorting Spring 14
Quicksort "There's nothing in your head the sorting hat can't see. So try me on and I will tell you where you ought to be." -The Sorting Hat, Harry Potter.
Data Structures and Algorithms
Advance Analysis of Algorithms
CSE 143 Lecture 23: quick sort.
CSC 413/513: Intro to Algorithms
Quicksort 1.
Previously Searching Linear (Sequential): O(n) Binary: O(log n)
Chapter 4: Divide and Conquer
Quick Sort (11.2) CSE 2011 Winter November 2018.
CO 303 Algorithm Analysis And Design Quicksort
Unit-2 Divide and Conquer
Ch 7: Quicksort Ming-Te Chi
8/04/2009 Many thanks to David Sun for some of the included slides!
Lecture No 6 Advance Analysis of Institute of Southern Punjab Multan
Divide-And-Conquer-And-Combine
Sub-Quadratic Sorting Algorithms
slides adapted from Marty Stepp
CS 3343: Analysis of Algorithms
Quicksort.
CSE 373 Data Structures and Algorithms
Algorithms: Design and Analysis
CSC 380: Design and Analysis of Algorithms
CSC 380: Design and Analysis of Algorithms
Data Structures & Algorithms
Quicksort.
CSE 326: Data Structures: Sorting
The Selection Problem.
Quicksort and Randomized Algs
Design and Analysis of Algorithms
CSE 332: Sorting II Spring 2016.
Divide and Conquer Merge sort and quick sort Binary search
Quicksort.
Presentation transcript:

EE 312 Software Design and Implementation I Quicksort EE 312 Software Design and Implementation I

Introduction Fastest known sorting algorithm in practice Average case: O(N log N) Worst case: O(N2) But, the worst case seldom happens. Another divide-and-conquer recursive algorithm, like mergesort

Quicksort S Divide step: Conquer step: recursively sort S1 and S2 Pick any element (pivot) v in S Partition S – {v} into two disjoint groups S1 = {x  S – {v} | x <= v} S2 = {x  S – {v} | x  v} Conquer step: recursively sort S1 and S2 Combine step: the sorted S1 (by the time returned from recursion), followed by v, followed by the sorted S2 (i.e., nothing extra needs to be done) v v S1 S2

Example: Quicksort

Example: Quicksort...

Pseudocode Input: an array A[p, r] Quicksort (A, p, r) { if (p < r) { q = Partition (A, p, r) //q is the position of the pivot element Quicksort (A, p, q-1) Quicksort (A, q+1, r) }

Partitioning Partitioning Key step of quicksort algorithm Goal: given the picked pivot, partition the remaining elements into two smaller sets Many ways to implement Even the slightest deviations may cause surprisingly bad results. We will learn an easy and efficient partitioning strategy here. How to pick a pivot will be discussed later

Partitioning Strategy Want to partition an array A[left .. right] First, get the pivot element out of the way by swapping it with the last element. (Swap pivot and A[right]) Let i start at the first element and j start at the next-to-last element (i = left, j = right – 1) swap 5 6 4 6 3 12 19 5 6 4 19 3 12 6 i j pivot

Partitioning Strategy Want to have A[p] <= pivot, for p < i A[p] >= pivot, for p > j When i < j Move i right, skipping over elements smaller than the pivot Move j left, skipping over elements greater than the pivot When both i and j have stopped A[i] >= pivot A[j] <= pivot <= pivot >= pivot i j i j 5 6 4 3 12 19

Partitioning Strategy When i and j have stopped and i is to the left of j Swap A[i] and A[j] The large element is pushed to the right and the small element is pushed to the left After swapping A[i] <= pivot A[j] >= pivot Repeat the process until i and j cross swap 5 6 4 19 3 12 6 5 3 4 19 6 12 6 i j i j

Partitioning Strategy When i and j have crossed Swap A[i] and pivot Result: A[p] <= pivot, for p < i A[p] >= pivot, for p > i 5 3 4 19 6 12 6 i j 5 3 4 19 6 12 6 j i 5 3 4 6 6 12 19 j i

Small arrays For very small arrays, quicksort does not perform as well as insertion sort how small depends on many factors, such as the time spent making a recursive call, the compiler, etc Do not use quicksort recursively for small arrays Instead, use a sorting algorithm that is efficient for small arrays, such as insertion sort

Picking the Pivot Use the first element as pivot if the input is random, ok if the input is presorted (or in reverse order) all the elements go into S2 (or S1) this happens consistently throughout the recursive calls Results in O(n2) behavior (Analyze this case later) Choose the pivot randomly generally safe random number generation can be expensive

Picking the Pivot Use the median of the array Partitioning always cuts the array into roughly half An optimal quicksort (O(N log N)) However, hard to find the exact median e.g., sort an array to pick the value in the middle

Pivot: median of three median3 We will use median of three Compare just three elements: the leftmost, rightmost and center Swap these elements if necessary so that A[left] = Smallest A[right] = Largest A[center] = Median of three Pick A[center] as the pivot Swap A[center] and A[right – 1] so that pivot is at second last position (why?) median3

Pivot: median of three A[left] = 2, A[center] = 13, A[right] = 6 2 5 6 4 13 3 12 19 6 2 5 6 4 6 3 12 19 13 Swap A[center] and A[right] 2 5 6 4 6 3 12 19 13 Choose A[center] as pivot pivot 2 5 6 4 19 3 12 6 13 Swap pivot and A[right – 1] pivot Note we only need to partition A[left + 1, …, right – 2]. Why?

Main Quicksort Routine Choose pivot Partitioning Recursion For small arrays

Partitioning Part Works only if pivot is picked as median-of-three. A[left] <= pivot and A[right] >= pivot Thus, only need to partition A[left + 1, …, right – 2] j will not run past the beginning because a[left] <= pivot i will not run past the end because a[right-1] = pivot

Quicksort Faster than Mergesort Both quicksort and mergesort take O(N log N) in the average case. Why is quicksort faster than mergesort? The inner loop consists of an increment/decrement (by 1, which is fast), a test and a jump. There is no extra juggling as in mergesort. inner loop

Analysis Assumptions: Running time A random pivot (no median-of-three partitioning) No cutoff for small arrays Running time pivot selection: constant time, i.e. O(1) partitioning: linear time, i.e. O(N) running time of the two recursive calls T(N)=T(i)+T(N-i-1)+cN where c is a constant i: number of elements in S1

Worst-Case Analysis What will be the worst case? The pivot is the smallest element, all the time Partition is always unbalanced

Best-case Analysis What will be the best case? Partition is perfectly balanced. Pivot is always in the middle (median of the array)

Average-Case Analysis Assume Each of the sizes for S1 is equally likely This assumption is valid for our pivoting (median-of-three) strategy On average, the running time is O(N log N)

Quicksort Quicksort’s reputation Quicksort’s implementation Quicksort for distinct elements Quicksort for duplicate elements Quicksort for small arrays Comparison of Quicksort and Mergesort

Quicksort’s reputation For many years, [Quicksort] had the reputation of being an algorithm that could in theory be highly optimized but in practice was impossible to code correctly

Quicksort for Small Arrays For very small arrays (N<= 20), quicksort does not perform as well as insertion sort A good cutoff range is N=10 Switching to insertion sort for small arrays can save about 15% in the running time

Comparisons of Mergesort and Quicksort Both run in O(nlogn) Compared with Quicksort, Mergesort has less number of comparisons but larger number of moving elements In Java, an element comparison is expensive but moving elements is cheap. Therefore, Mergesort is used in the standard Java library for generic sorting

Comparisons of Mergesort and Quicksort In C++, copying objects can be expensive while comparing objects often is relatively cheap. Therefore, quicksort is the sorting routine commonly used in C++ libraries