0% found this document useful (0 votes)
52 views16 pages

Quicksort Algorithm Average Case Analysis

The document discusses the quicksort algorithm. It begins with an average case analysis and provides the recurrence relation T(N) = N + T(NL) + T(NR) where NL and NR are the sizes of the two partitions. It then solves this recurrence to show that the average case runtime of quicksort is O(NlogN). The document also discusses the worst case runtime of O(N^2) that occurs when the partitioning does not evenly divide the list, and methods to avoid the worst case, such as selecting the pivot randomly.

Uploaded by

ERIC CONDE
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
52 views16 pages

Quicksort Algorithm Average Case Analysis

The document discusses the quicksort algorithm. It begins with an average case analysis and provides the recurrence relation T(N) = N + T(NL) + T(NR) where NL and NR are the sizes of the two partitions. It then solves this recurrence to show that the average case runtime of quicksort is O(NlogN). The document also discusses the worst case runtime of O(N^2) that occurs when the partitioning does not evenly divide the list, and methods to avoid the worst case, such as selecting the pivot randomly.

Uploaded by

ERIC CONDE
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

Quicksort algorithm

Average case analysis


http://www.xkcd.com/1185/
Stacksort connects to StackOverflow, searches for “sort a list”,
and downloads and runs code snippets until the list is sorted.
Q1-3

 For any recurrence relation of the form:

with

 The solution is:

 Notes:
1. Replace O with θ
2. Add quiz 3c: T(N) = 27T(N/3) + θ(N2)

Theorem 7.5 in Weiss


 http://maven.smith.edu/~thiebaut/java/sort/
demo.html
 http://www.cs.ubc.ca/~harrison/Java/sorting
-demo.html

 www.sorting-algorithms.com
 Invented by C.A.R. “Tony” Hoare in 1961*
 Very widely used
 Somewhat complex, but fairly easy to
understand
◦ Like in basketball, it’s all
about planting a good pivot.

*See Tony’s own story about


how it happened, at
http://research.microsoft.com
/en-us/people/thoare/.

Image from http://www.ultimate-youth-basketball-guide.com/pivot-foot.html.


Q4
Q5

// Assume min and max indices are low and high


pivot = a[low]
i = low+1, j = high
while (true) {
while (a[i] < pivot) i++
while (a[j] > pivot) j--
if (i >= j) break
swap(a, i, j)
}
swap(a, low, j) // moves the pivot to the
// correct place
return j
Q6-7

 Running time for partition of N elements is Θ(N)


 Quicksort Running time:
◦ call partition. Get two subarrays of sizes NL and NR
(what is the relationship between NL, NR, and N?)
◦ Then Quicksort the smaller parts
◦ T(N) = N + T(NL) + T(NR)
 Quicksort Best case: write and solve the recurrence
 Quicksort Worst case: write and solve the
recurrence
 average: a little bit trickier
◦ We have to be careful how we measure
 Let T(N) be the average # of comparisons of
array elements needed to quicksort N
elements.
 What is T(0)? T(1)?
 Otherwise T(N) is the sum of
◦ time for partition
◦ average time to quicksort left part: T(NL)
◦ average time to quicksort right part: T(NR)
 T(N) = N + T(NL) + T(NR)
 Weiss shows how not to count it:
 What if we picked as the partitioning element the
smallest element half of the time and the largest
half of the time?
 Then on the average, NL = N/2 and NR =N/2,
◦ but that doesn’t give a true picture of this worst-case
scenario.
◦ In every case, either NL = N-1 or NR =N-1
Q8

 We always need to make some kind of


“distribution” assumptions when we figure out
Average case
 When we execute
k = partition(pivot, i, j),
all positions i..j are equally likely places for the
pivot to end up
 Thus NL is equally likely to have each of the
values 0, 1, 2, … N-1
 NL+NR = N-1; thus NR is also equally likely to have
each of the values 0, 1, 2, … N-1
 Thus T(NL)= T(NR) =
Q9-10

 T(N) =
 Multiply both sides by N
 Rewrite, substituting N-1 for N
 Subtract the equations and forget the insignificant
(in terms of big-oh) -1:
◦ NT(N) = (N+1)T(N-1) + 2N
 Can we rearrange so that we can telescope?
Q11-13

 NT(N) = (N+1)T(N-1) + 2N
 Divide both sides by N(N+1)
 Write formulas for T(N), T(N-1),T(N-2) …T(2).
 Add the terms and rearrange.
 Notice the familiar series
 Multiply both sides by N+1.
 Best, worst, average time for Quicksort
 What causes the worst case?
 Avoid the worst case
◦ Select pivot from the middle
◦ Randomly select pivot
◦ Median of 3 pivot selection.
◦ Median of k pivot selection
 "Switch over" to a simpler sorting method
(insertion) when the subarray size gets small

Weiss's code does Median of 3 and switchover


to insertion sort at 10.
◦ Linked from schedule page

You might also like