Quicksort Quicksort QuicksortAp r Divide Ap r Ap

  • Slides: 20
Download presentation
Quicksort

Quicksort

Quicksort: Quicksort(A[p. . r]) Divide: 把 A[p. . r] 分成 A[p. . q-1] 和

Quicksort: Quicksort(A[p. . r]) Divide: 把 A[p. . r] 分成 A[p. . q-1] 和 A[q+1. . r] p r x A A[p. . q-1] A q x A[q+1. . r] pivot Conquer: 遞迴將 A[p. . q-1] 和 A[q+1. . r] 排序 Combine: 不需要作任何事 Quicksort 2

Quicksort(A, p, r) 1 If p < r then 2 q Partition(A, p, r)

Quicksort(A, p, r) 1 If p < r then 2 q Partition(A, p, r) 3 Quicksort(A, p, q-1) conquer */ 4 Quicksort(A, q+1, r) conquer */ Quicksort /* divide */ /* /* 3

Partition(A, p, r) 1 x A[r] 2 i p-1 3 for j p to

Partition(A, p, r) 1 x A[r] 2 i p-1 3 for j p to r-1 4 do if A[j] x 5 then i i+1 6 exchange A[i] A[j] 7 exchange A[i+1] A[r] 8 return i+1 Quicksort 4

i 和 j 的意義: p j i ≤x >x Quicksort r x unrestricted 5

i 和 j 的意義: p j i ≤x >x Quicksort r x unrestricted 5

i 和 j 如何改變: p j >x i ≤x p >x j i ≤x

i 和 j 如何改變: p j >x i ≤x p >x j i ≤x r x >x Quicksort 6

i 和 j 如何改變: p j ≤x i ≤x p >x j i ≤x

i 和 j 如何改變: p j ≤x i ≤x p >x j i ≤x r x >x Quicksort 7

範例: (Partition, x=A[r]=4) (a) (b) i p, j 2 7 1 3 5 6

範例: (Partition, x=A[r]=4) (a) (b) i p, j 2 7 1 3 5 6 j 8 7 1 (f) 1 3 5 6 8 3 2 i 1 p (g) (h) 4 r j 7 4 r p i 2 3 j 8 4 p r p, i 2 (e) 8 p, i 2 (d) 8 p, i j 2 (c) r 2 (i) 4 1 7 5 3 8 7 5 r 6 4 j r 6 4 i 1 p 2 8 i p 2 3 j 3 r 8 7 5 6 i 1 3 4 r 4 7 5 6 8 r 5 6 4 Quicksort 8

分析: Worst-case: (n 2) (對於已排序好的輸入) T(n) = = 猜測: T(n) c n 2 =

分析: Worst-case: (n 2) (對於已排序好的輸入) T(n) = = 猜測: T(n) c n 2 = O(n 2) Substituting: T(n) c c(n-1)2+ (n) cn 2 -c(2 n-1)+ (n) cn 2 (挑選夠大的 c 即可) Quicksort 9

 • T(n)= (n 2) n 1 n n n-1 1 n n-1 n-2

• T(n)= (n 2) n 1 n n n-1 1 n n-1 n-2 n-3 2 1 Quicksort 3 1 2 (n 2) 10

n n n lg n n … 1 1 1 1 n Total: Θ(n

n n n lg n n … 1 1 1 1 n Total: Θ(n lg n) Quicksort 14

n n n 1 n … 1 ≤n ≤n Total: Θ(n lg n) Quicksort

n n n 1 n … 1 ≤n ≤n Total: Θ(n lg n) Quicksort 15

(1)-(2), 可得 n. E(n) = ÞE(n) = = (套用 iteration method) = = (n)+

(1)-(2), 可得 n. E(n) = ÞE(n) = = (套用 iteration method) = = (n)+ (n) (lg n)+2 (套用 Harmonic Series) = (nlg n) Quicksort 17

Randomized version of quicksort Randomized Algorithm: 使用亂數產生器的演算法。 Pseudorandom-number generator: 一個傳回在統計上看似隨機數字的 deterministic algorithm 。 Randomized-Partition(A,

Randomized version of quicksort Randomized Algorithm: 使用亂數產生器的演算法。 Pseudorandom-number generator: 一個傳回在統計上看似隨機數字的 deterministic algorithm 。 Randomized-Partition(A, p, r) i Random(p, r); exchange(A[r], A[i]); return Partition(A, p, r) Quicksort 18

An intuitive and simple proof of quicksort: (by M. Fredman, Information Processing Letters 114

An intuitive and simple proof of quicksort: (by M. Fredman, Information Processing Letters 114 (2014)) Insistent-Q-Sort(A, p, r) 1 If p < r then 2 Repeat q Partition(A, p, r)/* divide */ until both parts have at most ¾ fraction 3 Insistent-Q-sort(A, p, q-1)/* conquer*/ 4 Insistent-Q-sort (A, q+1, r) /* conquer*/ Quicksort 19

n n n Avg Depth = lg n n … • Pr [Successful Partition]

n n n Avg Depth = lg n n … • Pr [Successful Partition] =1/2, why? • Average trial per node = 2 n Total: Θ(n lg n) Quicksort 20