CSE 373 Data Structures Lecture 19

Slides:



Advertisements
Similar presentations
Introduction to Algorithms Quicksort
Advertisements

Sorting Comparison-based algorithm review –You should know most of the algorithms –We will concentrate on their analyses –Special emphasis: Heapsort Lower.
Chapter 4: Divide and Conquer Master Theorem, Mergesort, Quicksort, Binary Search, Binary Trees The Design and Analysis of Algorithms.
DIVIDE AND CONQUER APPROACH. General Method Works on the approach of dividing a given problem into smaller sub problems (ideally of same size).  Divide.
Spring 2015 Lecture 5: QuickSort & Selection
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.
1 Today’s Material Divide & Conquer (Recursive) Sorting Algorithms –QuickSort External Sorting.
Quicksort, Mergesort, and Heapsort. Quicksort Fastest known sorting algorithm in practice  Caveats: not stable  Vulnerable to certain attacks Average.
Sorting Algorithms and Average Case Time Complexity
1 Sorting Problem: Given a sequence of elements, find a permutation such that the resulting sequence is sorted in some order. We have already seen: –Insertion.
CS203 Programming with Data Structures Sorting California State University, Los Angeles.
Introduction to Algorithms Rabie A. Ramadan rabieramadan.org 4 Some of the sides are exported from different sources.
CS 206 Introduction to Computer Science II 04 / 27 / 2009 Instructor: Michael Eckmann.
CS 206 Introduction to Computer Science II 12 / 05 / 2008 Instructor: Michael Eckmann.
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.
CS 206 Introduction to Computer Science II 12 / 03 / 2008 Instructor: Michael Eckmann.
TDDB56 DALGOPT-D DALG-C Lecture 8 – Sorting (part I) Jan Maluszynski - HT Sorting: –Intro: aspects of sorting, different strategies –Insertion.
Quicksort.
Divide and Conquer Sorting
CSC 2300 Data Structures & Algorithms March 20, 2007 Chapter 7. Sorting.
Chapter 7 (Part 2) Sorting Algorithms Merge Sort.
Mergesort and Quicksort Chapter 8 Kruse and Ryba.
Sorting Chapter 6 Chapter 6 –Insertion Sort 6.1 –Quicksort 6.2 Chapter 5 Chapter 5 –Mergesort 5.2 –Stable Sorts Divide & Conquer.
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.
Sorting (Part II: Divide and Conquer) CSE 373 Data Structures Lecture 14.
CSE 373 Data Structures Lecture 15
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.
1 Time Analysis Analyzing an algorithm = estimating the resources it requires. Time How long will it take to execute? Impossible to find exact value Depends.
Sorting HKOI Training Team (Advanced)
Computer Science 101 Fast Searching and Sorting. Improving Efficiency We got a better best case by tweaking the selection sort and the bubble sort We.
HKOI 2006 Intermediate Training Searching and Sorting 1/4/2006.
Merge Sort. What Is Sorting? To arrange a collection of items in some specified order. Numerical order Lexicographical order Input: sequence of numbers.
Quicksort, Mergesort, and Heapsort. Quicksort Fastest known sorting algorithm in practice  Caveats: not stable  Vulnerable to certain attacks Average.
September 29, Algorithms and Data Structures Lecture V Simonas Šaltenis Aalborg University
Sorting. Pseudocode of Insertion Sort Insertion Sort To sort array A[0..n-1], sort A[0..n-2] recursively and then insert A[n-1] in its proper place among.
1 Today’s Material Iterative Sorting Algorithms –Sorting - Definitions –Bubble Sort –Selection Sort –Insertion Sort.
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.
Sorting CSIT 402 Data Structures II. 2 Sorting (Ascending Order) Input ›an array A of data records ›a key value in each data record ›a comparison function.
CS 206 Introduction to Computer Science II 04 / 22 / 2009 Instructor: Michael Eckmann.
1 CSE 326: Data Structures A Sort of Detour Henry Kautz Winter Quarter 2002.
Review 1 Selection Sort Selection Sort Algorithm Time Complexity Best case Average case Worst case Examples.
Divide-and-Conquer The most-well known algorithm design strategy: 1. Divide instance of problem into two or more smaller instances 2.Solve smaller instances.
1 Heapsort, Mergesort, and Quicksort Sections 7.5 to 7.7.
Data Structures - CSCI 102 Selection Sort Keep the list separated into sorted and unsorted sections Start by finding the minimum & put it at the front.
ICS201 Lecture 21 : Sorting King Fahd University of Petroleum & Minerals College of Computer Science & Engineering Information & Computer Science Department.
Sorting Fundamental Data Structures and Algorithms Aleks Nanevski February 17, 2004.
Divide and Conquer Sorting Algorithms COMP s1 Sedgewick Chapters 7 and 8.
CSE 326: Data Structures Lecture 23 Spring Quarter 2001 Sorting, Part 1 David Kaplan
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 122 – Data Structures Sorting.
Chapter 4, Part II Sorting Algorithms. 2 Heap Details A heap is a tree structure where for each subtree the value stored at the root is larger than all.
PREVIOUS SORTING ALGORITHMS  BUBBLE SORT –Time Complexity: O(n 2 ) For each item, make (n –1) comparisons Gives: Comparisons = (n –1) + (n – 2)
Nothing is particularly hard if you divide it into small jobs. Henry Ford Nothing is particularly hard if you divide it into small jobs. Henry Ford.
Today’s Material Sorting: Definitions Basic Sorting Algorithms
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.
329 3/30/98 CSE 143 Searching and Sorting [Sections 12.4, ]
Heapsort CSE 373 Data Structures.
Quick Sort (11.2) CSE 2011 Winter November 2018.
Sorting CSE 373 Data Structures.
CSE 326: Data Structures Sorting
Heapsort CSE 373 Data Structures.
CSE 332: Data Abstractions Sorting I
CSE 373 Data Structures and Algorithms
CSE 332: Sorting II Spring 2016.
Advanced Sorting Methods: Shellsort
Presentation transcript:

CSE 373 Data Structures Lecture 19 Sorting CSE 373 Data Structures Lecture 19

Reading Reading Sections 7.1-7.3 and 7.5 Section 7.6, Mergesort Section 7.7, Quicksort 5/29/03 Sorting - Lecture 19

Sorting Input an array A of data records (Note: we have seen how to sort when elements are in linked lists: Mergesort) a key value in each data record a comparison function which imposes a consistent ordering on the keys (e.g., integers) Output reorganize the elements of A such that For any i and j, if i < j then A[i]  A[j] 5/29/03 Sorting - Lecture 19

Space How much space does the sorting algorithm require in order to sort the collection of items? Is copying needed? O(n) additional space In-place sorting – no copying – O(1) additional space Somewhere in between for “temporary”, e.g. O(logn) space External memory sorting – data so large that does not fit in memory 5/29/03 Sorting - Lecture 19

Time How fast is the algorithm? The definition of a sorted array A says that for any i<j, A[i] < A[j] This means that you need to at least check on each element at the very minimum, I.e., at least O(N) And you could end up checking each element against every other element, which is O(N2) The big question is: How close to O(N) can you get? 5/29/03 Sorting - Lecture 19

Stability Stability: Does it rearrange the order of input data records which have the same key value (duplicates)? E.g. Phone book sorted by name. Now sort by county – is the list still sorted by name within each county? Extremely important property for databases A stable sorting algorithm is one which does not rearrange the order of duplicate keys 5/29/03 Sorting - Lecture 19

n2 n·log2n n Faster is better! log2n

Bubble Sort “Bubble” elements to to their proper place in the array by comparing elements i and i+1, and swapping if A[i] > A[i+1] Bubble every element towards its correct position last position has the largest element then bubble every element except the last one towards its correct position then repeat until done or until the end of the quarter, whichever comes first ... 5/29/03 Sorting - Lecture 19

Bubblesort bubble(A[1..n]: integer array, n : integer): { i, j : integer; for i = 1 to n-1 do for j = 2 to n–i+1 do if A[j-1] > A[j] then SWAP(A[j-1],A[j]); } SWAP(a,b) : { t :integer; t:=a; a:=b; b:=t; 5/29/03 Sorting - Lecture 19

Put the largest element in its place larger value? 2 3 8 8 1 2 3 8 7 9 10 12 23 18 15 16 17 14 swap 1 2 3 7 8 9 10 12 23 18 15 16 17 14 9 10 12 23 23 1 2 3 7 8 9 10 12 23 18 15 16 17 14 swap 1 2 3 7 8 9 10 12 18 23 15 16 17 14 swap 1 2 3 7 8 9 10 12 18 15 23 16 17 14 swap 1 2 3 7 8 9 10 12 18 15 16 23 17 14 swap 1 2 3 7 8 9 10 12 18 15 16 17 23 14 swap 1 2 3 7 8 9 10 12 18 15 16 17 14 23 5/29/03 Sorting - Lecture 19

Put 2nd largest element in its place larger value? 2 3 7 8 9 10 12 18 18 1 2 3 7 8 9 10 12 18 15 16 17 14 23 swap 1 2 3 7 8 9 10 12 15 18 16 17 14 23 swap 1 2 3 7 8 9 10 12 15 16 18 17 14 23 swap 1 2 3 7 8 9 10 12 15 16 17 18 14 23 swap 1 2 3 7 8 9 10 12 15 16 17 14 18 23 Two elements done, only n-2 more to go ... 5/29/03 Sorting - Lecture 19

Bubble Sort: Just Say No “Bubble” elements to to their proper place in the array by comparing elements i and i+1, and swapping if A[i] > A[i+1] We bubblize for i=1 to n (i.e, n times) Each bubblization is a loop that makes n-i comparisons This is O(n2) 5/29/03 Sorting - Lecture 19

Insertion Sort What if first k elements of array are already sorted? 4, 7, 12, 5, 19, 16 We can shift the tail of the sorted elements list down and then insert next element into proper position and we get k+1 sorted elements 4, 5, 7, 12, 19, 16 5/29/03 Sorting - Lecture 19

Insertion Sort Is Insertion sort in place? Running time = ? InsertionSort(A[1..N]: integer array, N: integer) { i, j, temp: integer ; for i = 2 to N { temp := A[i]; j := i-1; while j > 1 and A[j-1] > temp { A[j] := A[j-1]; j := j–1;} A[j] = temp; } Is Insertion sort in place? Running time = ? 5/29/03 Sorting - Lecture 19

Example 1 2 3 8 7 9 10 12 23 18 15 16 17 14 1 2 3 7 8 9 10 12 23 18 15 16 17 14 1 2 3 7 8 9 10 12 18 23 15 16 17 14 1 2 3 7 8 9 10 12 18 15 23 16 17 14 1 2 3 7 8 9 10 12 15 18 23 16 17 14 1 2 3 7 8 9 10 12 15 18 16 23 17 14 1 2 3 7 8 9 10 12 15 16 18 23 17 14 5/29/03 Sorting - Lecture 19

Example 1 2 3 7 8 9 10 12 15 16 18 17 23 14 1 2 3 7 8 9 10 12 15 16 17 18 23 14 1 2 3 7 8 9 10 12 15 16 17 18 14 23 1 2 3 7 8 9 10 12 15 16 17 14 18 23 1 2 3 7 8 9 10 12 15 16 14 17 18 23 1 2 3 7 8 9 10 12 15 14 16 17 18 23 1 2 3 7 8 9 10 12 14 15 16 17 18 23 5/29/03 Sorting - Lecture 19

Insertion Sort Characteristics In place and Stable Running time Worst case is O(N2) reverse order input must copy every element every time Good sorting algorithm for almost sorted data Each item is close to where it belongs in sorted order. 5/29/03 Sorting - Lecture 19

Heap Sort We use a Max-Heap Root node = A[1] Children of A[i] = A[2i], A[2i+1] Keep track of current size N (number of nodes) 7 value 7 5 6 2 4 5 6 index 1 2 3 4 5 6 7 8 2 4 N = 5 5/29/03 Sorting - Lecture 19

Using Binary Heaps for Sorting Build a max-heap Do N DeleteMax operations and store each Max element as it comes out of the heap Data comes out in largest to smallest order Where can we put the elements as they are removed from the heap? 7 Build Max-heap 5 6 2 4 DeleteMax 6 5 4 2 7 5/29/03 Sorting - Lecture 19

1 Removal = 1 Addition Every time we do a DeleteMax, the heap gets smaller by one node, and we have one more node to store Store the data at the end of the heap array Not "in the heap" but it is in the heap array 6 value 6 5 4 2 7 5 4 index 1 2 3 4 5 6 7 8 2 7 N = 4 5/29/03 Sorting - Lecture 19

Repeated DeleteMax 5 5 2 4 6 7 2 4 6 7 N = 3 4 4 2 5 6 7 2 5 6 7 N = 2 1 2 3 4 5 6 7 8 6 7 N = 3 4 4 2 5 6 7 2 5 1 2 3 4 5 6 7 8 6 7 N = 2 5/29/03 Sorting - Lecture 19

Heap Sort is In-place After all the DeleteMaxs, the heap is gone but the array is full and is in sorted order 2 value 2 4 5 6 7 4 5 index 1 2 3 4 5 6 7 8 6 7 N = 0 5/29/03 Sorting - Lecture 19

Heapsort: Analysis Running time time to build max-heap is O(N) time for N DeleteMax operations is N O(log N) total time is O(N log N) Can also show that running time is (N log N) for some inputs, so worst case is (N log N) Average case running time is also O(N log N) Heapsort is in-place but not stable (why?) 5/29/03 Sorting - Lecture 19

“Divide and Conquer” Very important strategy in computer science: Divide problem into smaller parts Independently solve the parts Combine these solutions to get overall solution Idea 1: Divide array into two halves, recursively sort left and right halves, then merge two halves  Mergesort Idea 2 : Partition array into items that are “small” and items that are “large”, then recursively sort the two sets  Quicksort 5/29/03 Sorting - Lecture 19

Mergesort Divide it in two at the midpoint Conquer each side in turn (by recursively sorting) Merge two halves together 8 2 9 4 5 3 1 6 5/29/03 Sorting - Lecture 19

Mergesort Example 8 2 9 4 5 3 1 6 Divide 8 2 9 4 5 3 1 6 Divide 8 2 8 2 9 4 5 3 1 6 Divide 8 2 9 4 5 3 1 6 Divide 1 element 8 2 9 4 5 3 1 6 Merge 2 8 4 9 3 5 1 6 Merge 2 4 8 9 1 3 5 6 Merge 1 2 3 4 5 6 8 9 5/29/03 Sorting - Lecture 19

Auxiliary Array The merging requires an auxiliary array. 2 4 8 9 1 3 5 6 Auxiliary array 5/29/03 Sorting - Lecture 19

Auxiliary Array The merging requires an auxiliary array. 2 4 8 9 1 3 5 6 Auxiliary array 1 5/29/03 Sorting - Lecture 19

Auxiliary Array The merging requires an auxiliary array. 2 4 8 9 1 3 5 6 Auxiliary array 1 2 3 4 5 5/29/03 Sorting - Lecture 19

Merging i j normal target Left completed first i j target copy 5/29/03 Sorting - Lecture 19

Merging i j Right completed first target first second 5/29/03 Sorting - Lecture 19

Merging Algorithm Merge(A[], T[] : integer array, left, right : integer) : { mid, i, j, k, l, target : integer; mid := (right + left)/2; i := left; j := mid + 1; target := left; while i < mid and j < right do if A[i] < A[j] then T[target] := A[i] ; i:= i + 1; else T[target] := A[j]; j := j + 1; target := target + 1; if i > mid then //left completed// for k := left to target-1 do A[k] := T[k]; if j > right then //right completed// k : = mid; l := right; while k > i do A[l] := A[k]; k := k-1; l := l-1; } 5/29/03 Sorting - Lecture 19

Recursive Mergesort Mergesort(A[], T[] : integer array, left, right : integer) : { if left < right then mid := (left + right)/2; Mergesort(A,T,left,mid); Mergesort(A,T,mid+1,right); Merge(A,T,left,right); } MainMergesort(A[1..n]: integer array, n : integer) : { T[1..n]: integer array; Mergesort[A,T,1,n]; 5/29/03 Sorting - Lecture 19

Iterative Mergesort Merge by 1 Merge by 2 Merge by 4 Merge by 8 5/29/03 Sorting - Lecture 19

Iterative Mergesort Need of a last copy Merge by 1 Merge by 2 5/29/03 Sorting - Lecture 19

Iterative Mergesort How do you handle non-powers of 2? IterativeMergesort(A[1..n]: integer array, n : integer) : { //precondition: n is a power of 2// i, m, parity : integer; T[1..n]: integer array; m := 2; parity := 0; while m < n do for i = 1 to n – m + 1 by m do if parity = 0 then Merge(A,T,i,i+m-1); else Merge(T,A,i,i+m-1); parity := 1 – parity; m := 2*m; if parity = 1 then for i = 1 to n do A[i] := T[i]; } How do you handle non-powers of 2? How can the final copy be avoided? 5/29/03 Sorting - Lecture 19

Mergesort Analysis Let T(N) be the running time for an array of N elements Mergesort divides array in half and calls itself on the two halves. After returning, it merges both halves using a temporary array Each recursive call takes T(N/2) and merging takes O(N) 5/29/03 Sorting - Lecture 19

Mergesort Recurrence Relation The recurrence relation for T(N) is: T(1) < a base case: 1 element array  constant time T(N) < 2T(N/2) + bN Sorting N elements takes the time to sort the left half plus the time to sort the right half plus an O(N) time to merge the two halves T(N) = O(n log n) 5/29/03 Sorting - Lecture 19

Properties of Mergesort Not in-place Requires an auxiliary array (O(n) extra space) Stable Make sure that left is sent to target on equal values. Iterative Mergesort reduces copying. 5/29/03 Sorting - Lecture 19

Quicksort Quicksort uses a divide and conquer strategy, but does not require the O(N) extra space that MergeSort does Partition array into left and right sub-arrays Choose an element of the array, called pivot the elements in left sub-array are all less than pivot elements in right sub-array are all greater than pivot Recursively sort left and right sub-arrays Concatenate left and right sub-arrays in O(1) time 5/29/03 Sorting - Lecture 19

“Four easy steps” To sort an array S 1. If the number of elements in S is 0 or 1, then return. The array is sorted. 2. Pick an element v in S. This is the pivot value. 3. Partition S-{v} into two disjoint subsets, S1 = {all values xv}, and S2 = {all values xv}. 4. Return QuickSort(S1), v, QuickSort(S2) 5/29/03 Sorting - Lecture 19

The steps of QuickSort S S1 S2 S1 S2 S select pivot value partition S 81 31 57 43 13 75 92 65 26 S1 S2 partition S 31 75 43 13 65 81 92 26 57 QuickSort(S1) and QuickSort(S2) S1 S2 13 26 31 43 57 65 75 81 92 S 13 26 31 43 57 65 75 81 92 Voila! S is sorted [Weiss] 5/29/03 Sorting - Lecture 19

Details, details Implementing the actual partitioning Picking the pivot want a value that will cause |S1| and |S2| to be non-zero, and close to equal in size if possible Dealing with cases where the element equals the pivot 5/29/03 Sorting - Lecture 19

Quicksort Partitioning Need to partition the array into left and right sub-arrays the elements in left sub-array are  pivot elements in right sub-array are  pivot How do the elements get to the correct partition? Choose an element from the array as the pivot Make one pass through the rest of the array and swap as needed to put elements in partitions 5/29/03 Sorting - Lecture 19

Partitioning:Choosing the pivot One implementation (there are others) median3 finds pivot and sorts left, center, right Median3 takes the median of leftmost, middle, and rightmost elements An alternative is to choose the pivot randomly (need a random number generator; “expensive”) Another alternative is to choose the first element (but can be very bad. Why?) Swap pivot with next to last element 5/29/03 Sorting - Lecture 19

Partitioning in-place Set pointers i and j to start and end of array Increment i until you hit element A[i] > pivot Decrement j until you hit elmt A[j] < pivot Swap A[i] and A[j] Repeat until i and j cross Swap pivot (at A[N-2]) with A[i] 5/29/03 Sorting - Lecture 19

Example Choose the pivot as the median of three 1 2 3 4 5 6 7 8 9 8 1 4 9 3 5 2 7 6 Median of 0, 6, 8 is 6. Pivot is 6 1 4 9 7 3 5 2 6 8 Place the largest at the right and the smallest at the left. Swap pivot with next to last element. i j

Example Move i to the right up to A[i] larger than pivot. j 1 4 9 7 3 5 2 6 8 i j 1 4 9 7 3 5 2 6 8 i j 1 4 9 7 3 5 2 6 8 i j 1 4 2 7 3 5 9 6 8 Move i to the right up to A[i] larger than pivot. Move j to the left up to A[j] smaller than pivot. Swap 5/29/03 Sorting - Lecture 19

Example Cross-over i > j S1 < pivot pivot S2 > pivot 1 4 2 7 1 4 2 7 3 5 9 6 8 i j 1 4 2 7 3 5 9 6 6 8 i j 1 4 2 5 3 7 9 6 8 i j 1 4 2 5 3 7 9 6 8 j i 1 4 2 5 3 7 9 6 6 8 Cross-over i > j j i 1 4 2 5 3 6 9 7 8 S1 < pivot pivot S2 > pivot

Recursive Quicksort Don’t use quicksort for small arrays. Quicksort(A[]: integer array, left,right : integer): { pivotindex : integer; if left + CUTOFF  right then pivot := median3(A,left,right); pivotindex := Partition(A,left,right-1,pivot); Quicksort(A, left, pivotindex – 1); Quicksort(A, pivotindex + 1, right); else Insertionsort(A,left,right); } Don’t use quicksort for small arrays. CUTOFF = 10 is reasonable. 5/29/03 Sorting - Lecture 19

Quicksort Best Case Performance Algorithm always chooses best pivot and splits sub-arrays in half at each recursion T(0) = T(1) = O(1) constant time if 0 or 1 element For N > 1, 2 recursive calls plus linear time for partitioning T(N) = 2T(N/2) + O(N) Same recurrence relation as Mergesort T(N) = O(N log N) 5/29/03 Sorting - Lecture 19

Quicksort Worst Case Performance Algorithm always chooses the worst pivot – one sub-array is empty at each recursion T(N)  a for N  C T(N)  T(N-1) + bN  T(N-2) + b(N-1) + bN  T(C) + b(C+1)+ … + bN  a +b(C + (C+1) + (C+2) + … + N) T(N) = O(N2) Fortunately, average case performance is O(N log N) (see text for proof) 5/29/03 Sorting - Lecture 19

Properties of Quicksort Not stable because of long distance swapping. No iterative version (without using a stack). Pure quicksort not good for small arrays. “In-place”, but uses auxiliary storage because of recursive call (O(logn) space). O(n log n) average case performance, but O(n2) worst case performance. 5/29/03 Sorting - Lecture 19

Folklore “Quicksort is the best in-memory sorting algorithm.” Truth Quicksort uses very few comparisons on average. Quicksort does have good performance in the memory hierarchy. Small footprint Good locality 5/29/03 Sorting - Lecture 19