Introduction to Quick Sort
EUnS
20191115
...................................... 1
1.................................... 3
2............................. 3
3.............................. 6
3.1 ............................. 6
3.2 하한 ..................... 6
3.3 ................................. 7
4.......................... 9
4.1 ........................ 9
4.2 ........................ 9
4.3 방법 .................. 10
5................................. 13
5.1 ........................ 13
5.2 ........................... 13
5.3 Hoare’s Partition VS Lomuto’s Partition . . . . . . . . . . . . 16
6 Quick sort........................ 19
7.................................... 21
7.1 ........................... 21
7.2 hybridsort............................. 21
7.3 ............................ 22
7.4 medianofthree .......................... 25
7.5 Parallelization........................... 25
1
8................................ 26
8.1 HOARE VS LOMUTO . . . . . . . . . . . . . . . . . . . . . 27
8.2 .......................... 27
8.3 std::sort VS J. Bentley D. McIlroy . . . . . . . . . 30
................................... 32
.................................... 32
................................... 33
33
2
1
:O(nlg n)
:O(n2)
C++ std::sort있음1
2
(divide and conquer) 방법.
5
.
1QUICKSORT(A, p , r )
2i f p<r
3q = PARTITION(A, p , r )
4QUICKSORT(A, p , q1)
5QUICKSORT(A, q+1, r )
Lomuto’s Partition Scheme
1PARTITION(A , p , r )
2x= A[ r ] // p i v o t
3i = p1
4f o r j = p to r1
5i f A[ j ]<= x
6i = i + 1
7exchang e A[ i ] with A[ j ]
8exchang e A[ i +1] with A[ r ]
9return i + 1
1introsort : quicksortheapsort, insertionsort.
3
Hoare, C. A. R.1961음으Quick sort. PARTITION
Lomuto(1999)PARTITION
, HoarePartition
.
PARTITION Θ(n).
4
1: quick sort [1]
5
3
3.1
3.1 (),하한,
big O O
f(n), g(n)0f(n)cg(n)(nn0)n0,
cf(n) = O(g(n)).
하한 omega
f(n), g(n)0cg(n)f(n)(nn0)n0,
cf(n) = Ω(g(n)).
Theta Θ
Θ(g(n))f(n) = O(g(n))f(n) = Ω(g(n))
.
3.2 하한
n
X
k=1
1
k= Θ(lg n)
f(k)음이
Zn
m1
f(x)dx
n
X
k=m
f(k)Zn+1
m
f(x)dx
f(k)음이 4 .
해할 .
Zn+1
m
f(x)dx
n
X
k=m
f(k)Zn
m1
f(x)dx
n
X
k=2
1
k+ 1 Zn+1
2
f(x)dx + 1 = ln(x) + 1 = O(ln x)
Zn+1
1
f(x)dx = ln(x+ 1) = Ω(ln x)
n
X
k=1
1
k
n
X
k=1
1
k= Θ(lg n)
6
2: [1]
3.3
Indicator random variables
I{A}=(1 ( H)
0 ( ¯
H)
7
E[XA] = E[I{A}]
= 1 ×Pr(A)+0×Pr( ¯
A)2
= Pr(A)
2PrA
8
4
quicksort
음을 .
4.1
(,).
..
T(n) = T(n1) + cn
T(n) = T(n1) + cn
=T(n2) + c(n1) + cn
=c
n
X
k=1
k
=1
2cn2
= Θ(n2)
Θ(n2).
4.2
.
T(n) = 2T(n
2) + cn
.
2 리를 Θ(nlg n)
.3
3marster theory.
9
3: quick sort [1]
4.3 방법
.
9:1할하
우와
9:1할하
음의 음이 .
T(n)T9n
10 +Tn
10+cn
10
4: 9:1할하[1]
.log10 n이의 cn
cn작은 log10/9ncn
작으nlog10/9n=O(nlog n).T(n) = Θ(nlog n)
우와
5: ,[1]
T(n) T(n-1)Θ(n).
11
Θ(n)
Θ(nlg n).
12
5
5.1
음이 .
T(n) = max
0qn1(T(q) + T(nq1)) + Θ(n)
T(n)Θ(n2)임을 .
.T(n)c1n2.
T(n)max
0qn1(c1q2+c1(nq1)2) + Θ(n)
.
0qn1c1q2+c1(nq1)2
f(q) = c1q2+c1(nq1)2f(q)=2c1q2c1(nq1)
q=n1
2.q
.q= 0
q=n1
.
T(n)c1(n1)2+ Θ(n)
c1n2c(2n1) + Θ(n)
c1n2
Θ(n) = dnc1> dc1결과
T(n)c1n2음을 .c2n2T(n)임을
c2< d잡음으T(n)c2n2음을 .
T(n) = Θ(n2).
5.2
1n.
13
E[X] = E"n
X
i=1
Xi#
=
n
X
i=1
E[Xi]
음의 조정리를 .
Lemma 5.1. Xn열에QUICKSORT
PARTITION4 QUICKSORT
O(N+X).
Proof. PARTITIONn .for
행하, for 반복4행한.
X
.
A={z1, z2, ..., zn}.
Zij ={zi, zi+1, ..., zj}.zizj.
이유PARTITIONpivot
,pivot는다.
Xij =I{zizj}
X=
n1
X
i=1
n
X
j=i+1
Xij
E[x] = E
n1
X
i=1
n
X
j=i+1
Xij
=
n1
X
i=1
n
X
j=i+1
E[Xij ]
=
n1
X
i=1
n
X
j=i+1
P r{zizj}
14
P r{zizj=P r{Zij zizj.}
=P r{Zij zi.}+P r{Zij zj.}
=1
ji+ 1 +1
ji+ 1
=2
ji+ 1
E[X] =
n1
X
i=1
n
X
j=i+1
2
ji+ 1
jik.
E[X] =
n1
X
i=1
n
X
j=i+1
2
ji+ 1
=
n1
X
i=1
ni
X
k=1
2
k+ 1
n1
X
i=1
n
X
k=1
2
k
n1
X
i=1
clg n
cn lg n
E[X] = O(nlg n)
15
하한 .
E[X] =
n1
X
i=1
ni
X
k=1
2
k+ 1
=
n1
X
k=1
2
k+ 1 +
n2
X
k=1
2
k+ 1 +· · · +
1
X
k=1
2
k+ 1
= (n1) 2
1+1+ (n2) 2
2+1+· · · + 1 ×2
(n1) + 1
=
n1
X
k=1
2
k+ 1 ×(nk)
=
n1
X
k=1 2n
k+ 1 2k
k+ 1
= 2n
n1
X
k=1
1
k+ 1 2
n1
X
k=1
k
k+ 1
2nc lg n2(n1)
n1
X
k=1
k
k+ 1
n1
X
k=1 k
k+ 1 +1
k+ 1!
Ω(nlg n)
Θ(nlg n)
5.3 Hoare’s Partition VS Lomuto’s Partition
Lomuto’s Partition Scheme
1PARTITION(A , p , r )
2x= A[ r ] // p i v o t
3i = p1
4f o r j = p to r1
5i f A[ j ]<= x
6i = i + 1
7exchang e A[ i ] with A[ j ]
8exchang e A[ i +1] with A[ r ]
9return i + 1
Hoare’s partition scheme
1PARTITION(A , p , r )
2x= A[ r ] // p i v o t
16
3i = p
4j = r
5while TRUE
6repeat
7j = j 1
8u n t i l A[ j ] <= x
9repeat
10 i = i + 1
11 u n t i l A[ i ] >= x
12 i f i<j
13 exchang e A[ i ] with A[ j ]
14 e l s e r e t u r n j
니다 stackexchange
해하 Lomuto’s Partition.
.
음을 .
n-1.
Lomuto’s Partition1<=x <=npivotx
x1행한.
1
n
n
X
x=1
(x1) = n1