350 likes | 933 Views
Design and Analysis of Algorithms Quicksort. Haidong Xue Summer 2012, at GSU. Review of insertion sort and merge sort. Insertion sort Algorithm Worst case number of comparisons = O(?) Merge sort Algorithm Worst case number of comparisons = O(?). Sorting Algorithms. Quicksort Algorithm.
E N D
Design and Analysis of AlgorithmsQuicksort HaidongXue Summer 2012, at GSU
Review of insertion sort and merge sort • Insertion sort • Algorithm • Worst case number of comparisons = O(?) • Merge sort • Algorithm • Worst case number of comparisons = O(?)
Quicksort Algorithm • Input: A[1, …, n] • Output: A[1, .., n], where A[1]<=A[2]…<=A[n] • Quicksort: • if(n<=1) return; • Choose the pivot p = A[n] • Put all elements less than p on the left; put all elements lager than p on the right; put p at the middle. (Partition) • Quicksort(the array on the left of p) • Quicksort(the array on the right of p)
Quicksort Algorithm Current pivots • Quicksort example Previous pivots 2 8 7 1 3 5 6 4 Quicksort 2 1 3 4 8 5 7 6 Hi, I am nothing Nothing Jr. 7 5 2 3 4 6 8 1 Nothing 3rd 5 1 2 6 3 4 7 8 5 1 2 6 3 4 7 8 5 1 2 6 3 4 7 8
Quicksort Algorithm • More detail about partition • Input: A[1, …, n] (p=A[n]) • Output: A[1,…k-1, k, k+1, … n], where A[1, …, k-1]<A[k] and A[k+1, … n] > A[k], A[k]=p • Partition: • t = the tail of smaller array • from i= 1 to n-1{ if(A[i]<p) { exchange A[t+1] with A[i]; update t to the new tail; } • exchange A[t+1] with A[n];
Quicksort Algorithm • Partition example 2 8 7 1 3 5 6 4 2 8 7 1 3 Exchange 2 with A[tail+1] 5 6 4 tail tail tail tail 2 8 7 1 3 Do nothing 5 6 4 2 8 7 1 3 5 6 4 Do nothing
Quicksort Algorithm • Partition example 2 8 7 1 3 Exchange 1 with A[tail+1] 5 6 4 2 1 7 3 5 6 4 8 Exchange 3 with A[tail+1] tail tail tail tail 8 Do nothing 3 2 5 6 4 1 7 Do nothing 3 2 1 8 5 6 4 7 8 4 1 Final step: exchange A[n] with A[tail+1] 3 2 5 6 7
Quicksort Algorithm The final version of quick sort: Quicksort(A, p, r){ if(p<r){ //if(n<=1) return; q = partition(A, p, r); //small ones on left; //lager ones on right Quicksort(A, p, q-1); Quicksort(A, q+1, r); } }
Analysis of Quicksort Time complexity • Worst case • Expected Space complexity - extra memory • 0 = O(1)
Analysis of Quicksort Worst case • The most unbalanced one --- • Is it the worst case? • Strict proof Expected time complexity • Strict proof
Strict proof of the worst case time complexity Proof that • When n=1, (1)= • Hypothesis: when induction statement: when
Strict proof of the expected time complexity • Given A[1, …, n], after sorting them to , the chance for 2 elements, A[i] and A[j], to be compared is . • The total comparison is calculated as:
Java implementation of Quicksort • Professional programmers DO NOT implement sorting algorithms by themselves • We do it for practicing algorithm implementation techniques and understanding those algorithms • Code quicksort • Sort.java // the abstract class • Quicksort_Haydon.java // my quicksort implementation • SortingTester.java // correctness tester