Chapter 7 Sorting Spring 14

Slides:



Advertisements
Similar presentations
Chapter 9 continued: Quicksort
Advertisements

Introduction to Algorithms Quicksort
Algorithms Analysis Lecture 6 Quicksort. Quick Sort Divide and Conquer.
Chapter 4: Divide and Conquer Master Theorem, Mergesort, Quicksort, Binary Search, Binary Trees The Design and Analysis of Algorithms.
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.
CS203 Programming with Data Structures Sorting California State University, Los Angeles.
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.
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
1 7.5 Heapsort Average number of comparison used to heapsort a random permutation of N items is 2N logN - O (N log log N).
Chapter 7 (Part 2) Sorting Algorithms Merge Sort.
CS2420: Lecture 11 Vladimir Kulyukin Computer Science Department Utah State University.
Sorting II/ Slide 1 Lecture 24 May 15, 2011 l merge-sorting l quick-sorting.
CS 202, Spring 2003 Fundamental Structures of Computer Science II Bilkent University1 Sorting - 3 CS 202 – Fundamental Structures of Computer Science II.
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
Fall 2013 Instructor: Reza Entezari-Maleki Sharif University of Technology 1 Fundamentals of Programming Session 17 These.
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.
Advanced Sorting.
Divide and Conquer Sorting
Quick Sort Divide: Partition the array into two sub-arrays
Quicksort
Quick-Sort 9/13/2018 1:15 AM Quick-Sort     2
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
Description Given a linear collection of items x1, x2, x3,….,xn
Quicksort 1.
Chapter 4: Divide and Conquer
Advanced Sorting Methods: Shellsort
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!
Sub-Quadratic Sorting Algorithms
slides adapted from Marty Stepp
Chapter 4.
EE 312 Software Design and Implementation I
CS 3343: Analysis of Algorithms
Quicksort.
CSE 373: Data Structures and Algorithms
CS 1114: Sorting and selection (part two)
CSE 373 Data Structures and Algorithms
CSC 380: Design and Analysis of Algorithms
CSC 380: Design and Analysis of Algorithms
Data Structures & Algorithms
Divide & Conquer Sorting
Quicksort.
CSE 326: Data Structures: Sorting
Design and Analysis of Algorithms
CSE 332: Sorting II Spring 2016.
Quicksort.
Presentation transcript:

Chapter 7 Sorting Spring 14 quick-sort

Sorting Arrange keys in ascending or descending order. One of the most fundamental problems. First computer program was a sorting program (written by von Neumann) Studied: selection sort, insertion sort, merge sort (?) and heap sort

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

Quicksort 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: combine the sorted S1, followed by v, followed by the sorted S2 S 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 5 6 4 19 3 12 6 5 6 4 19 3 12 6 i j i j

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 http://math.hws.edu/TMCM/java/xSortLab/

Implementation of partitioning step int partition(A, left, right){ int pivot = A[right]; int i = left, j = right-1; for (; ;) { while (A[i] < pivot && i <= right) i++; while (pivot < A[j] && j >= left) j--; if (i < j) {swap(A[i], A[j]); i++; j--; } else break; swap(A[i], A[right]); return 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, then we can choose the key in position A[right] as pivot. if the input is sorted (straight or reverse) 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

Pivot: median of three 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 Code for partitioning with median of three pivot:

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?

Implementation of partitioning step 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 end because a[left] <= pivot i will not run past the end because a[right-1] = pivot

Main Quicksort Routine Choose pivot Partitioning Recursion For small arrays

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. Mergesort involves a large number of data movements. Quicksort is done in-place.

Performance of quicksort Worst-case: takes O(n2) time. Average-case: takes O(n log n) time. On typical inputs, quicksort runs faster than other algorithms. Compare various sorting algorithms at: http://www.geocities.com/siliconvalley/network/1854/Sort1.html