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 AlgorithmWorst TimeExpected TimeExtra Memory Insertion sortO(1) Merge sortO(n) Quick sortO(1) Heap sortO(1)
Quicksort Algorithm Input: A[1, …, n] Output: A[1,.., n], where A[1]<=A[2]…<=A[n] Quicksort: 1.if(n<=1) return; 2.Choose the pivot p = A[n] 3.Put all elements less than p on the left; put all elements lager than p on the right; put p at the middle. (Partition) 4. Quicksort(the array on the left of p) 5. Quicksort(the array on the right of p)
Quicksort Algorithm Quicksort example Current pivots Previous pivots Quicksort Hi, I am nothing Nothing Jr. Nothing 3rd
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], A[k]=p Partition: 1.t = the tail of smaller array 2.from i= 1 to n-1{ if(A[i]<p) { exchange A[t+1] with A[i]; update t to the new tail; } 3.exchange A[t+1] with A[n];
Quicksort Algorithm Partition example tail Exchange 2 with A[tail+1] Do nothing
Quicksort Algorithm Partition example tail Exchange 1 with A[tail+1] tail Exchange 3 with A[tail+1] Do nothing tail Do nothing Final step: exchange A[n] with A[tail+1]
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
Strict proof of the worst case time complexity
Strict proof of the expected time complexity
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