You are on page 1of 32

Quicksort Analysis

• Divide and conquer


• Partitioning
• Worst-case analysis
• Best Case Analysis
Copyright © 2001-5 by Erik D. Demaine
and Charles E. Leiserson • Average Case
Analysis
Quicksort
• Proposed by C.A.R. Hoare in 1962.
• Divide-and-conquer algorithm.
• Sorts “in place” (like insertion sort, but not
like merge sort).
Divide and conquer
Quicksort an n-element array:
1. Divide: Partition the array into two subarrays
around a pivot x such that elements in lower
subarray  x  elements in upper subarray.
≤x xx ≥x
2. Conquer:x Recursively sort thex two subarrays.
3. Combine: Trivial.
Key: Linear-time partitioning subroutine.
Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson
Partitioning subroutine
PARTITION(A, p, q) ⊳ A[ p . . q]
x  A[ p] ⊳ pivot = A[ p]
ip R u
== OO((nn)) n
R u n nn n i in
for j  p + 1 to q fgfgototirirmnmn ee
do if A[ j]  x eelleemmeen
then ii+1
ts .
exchange A[i]  n t s .
A[ j] exchange A[ p]  A[i]
return i
Invariant: xx ≤x ≥x ??
p x i x j
q
Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
i 0j 3

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
i 0 3j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
i 0 3 j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
i 3 0j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
i 3 0 j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
i 3 0 j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
3 0
66 55 33 10
1 88 13
1 22 11
11
i 0 3j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
3 0
66 55 33 10
1 88 13
1 22 11
11
i 0 3 j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
3 0
66 55 33 10
1 88 13
1 22 11
11
0 3
66 55 33 22 88 13
1 10
1 11
11
i 3 0j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
3 0
66 55 33 10
1 88 13
1 22 11
11
0 3
66 55 33 22 88 13
1 10
1 11
11
i 3 0 j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
3 0
66 55 33 10
1 88 13
1 22 11
11
0 3
66 55 33 22 88 13
1 10
1 11
11
i 3 0 j

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Example of partitioning

66 10
1 13
1 55 88 33 22 11
11
0 3
66 55 13
1 10
1 88 33 22 11
11
3 0
66 55 33 10
1 88 13
1 22 11
11
0 3
66 55 33 22 88 13
1 10
1 11
11
3 0
22 55 33 66 88 13
1 10
1 11
11
i 3 0
Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson
Pseudocode for quicksort
QUICKSORT(A, p, r)
if p < r
then q  PARTITION(A, p, r)
QUICKSORT(A, p, q–1)
QUICKSORT(A, q+1, r)

Initial call: QUICKSORT(A, 1, n)

September 21, 2005 Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson L4.17
Analysis of quicksort

• Assume all input elements are distinct.


• Let T(n) = worst-case running time on
an array of n elements.

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Worst-case of quicksort
• Input sorted or reverse sorted.
• Partition around min or max element.
• One side of partition always has no elements.
T (n)  T (0)  T (n 1)  (n)
 (1)  T (n 1)  (n)
 T (n 1)  (n)
 (n2 ) (arithmetic series)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Worst-case recursion tree
T(n) = T(0) + T(n–1) +
cn

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Worst-case recursion tree
T(n) = T(0) + T(n–1) +
cn T(n)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Worst-case recursion tree
T(n) = T(0) + T(n–1) +
cn
cn
T(0) T(n–1)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Worst-case recursion tree
T(n) = T(0) + T(n–1) +
cn
cn
T(0) c(n–1)
T(0) T(n–2)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Worst-case recursion tree
T(n) = T(0) + T(n–1) +
cn
cn
T(0) c(n–1)
T(0) c(n–2)
T(0) O

(1)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Worst-case recursion tree
T(n) = T(0) + T(n–1) +
cn
cn ⎞
⎛ n
T(0) c(n–1) ⎜  k ⎠⎟  n2
⎝k
T(0) c(n–  1
2)
T(0) O

(1)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Worst-case recursion tree
T(n) = T(0) + T(n–1) +
cn
cn ⎞
⎛ n
(1) c(n– ⎜  k ⎠⎟  n2
1) ⎝k
(1) c(n–  1 T(n) = (n) + (n2)
h = n 2)
(1) O = (n2)

(1)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Best-case analysis
(For intuition only!)
If we’re lucky, PARTITION splits the array evenly:
T(n) = 2T(n/2) + (n)
= (n lg n) (same as merge sort)

1 9
What if the split is always 10 : 10

1 n T 9 n
? T (n)  T 10 10
(n)
What is the solution to this recurrence?

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Analysis of “almost-best” case
T
(n)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Analysis of “almost-best” case
cn
T 101 T 109
n n

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Analysis of “almost-best” case
cn
1 cn
10 9 cn
10

T 100
1
n T 100
9 T 9
n T 100
81
100

n  n

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Analysis of “almost-best” case
cn cn
1 cn
10 9 cn
10
cn
log10/9n
1
cn 9
cn cn
100 100 9 cn
100 81 cn
100


(1)
(1)

Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson


Analysis of “almost-best” case
cn cn
1 cn
10 9 cn cn
log10 n 10
log10/9n
1
cn 9
cn cn
100 100 9 cn
100 81 cn
100


(1)
(n lg (1)
n) cn log10n  T(n)  cn log10/9n + (n)
Lucky! Copyright © 2001-5 by Erik D. Demaine and Charles E. Leiserson

You might also like