Average-Case and Distributional Analysis of Java 7’s Dual Pivot Quicksort
Markus E. Nebel
based on joint work with Ralph Neininger and Sebastian Wild
AofA 2013 Menorca, Spain
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 1 / 22
Average-Case and Distributional Analysis of Java 7s Dual Pivot - - PowerPoint PPT Presentation
Average-Case and Distributional Analysis of Java 7s Dual Pivot Quicksort Markus E. Nebel based on joint work with Ralph Neininger and Sebastian Wild AofA 2013 Menorca, Spain Markus E. Nebel Java 7s Dual Pivot Quicksort 2013/18/5 1 / 22
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 1 / 22
+Mergesort variant as stable sort
Sorting methods listed on Wikipedia Sorting methods of standard libraries for random access data Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 2 / 22
+Mergesort variant as stable sort
Sorting methods listed on Wikipedia Sorting methods of standard libraries for random access data Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 2 / 22
1961 1969 1975 ’78 1993 1997 ’62 ’77 today Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 3 / 22
1961 1969 1975 ’78 1993 1997 ’62 ’77 today Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 3 / 22
1961 1969 1975 ’78 1993 1997 ’62 ’77 today 2009 Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 3 / 22
0.5 1 1.5 2 ·106 7 8 9 n time 10−6 · n ln n Java 6 Library Normalized Java runtimes (in ms). Average and standard deviation of 1000 random permutations per size. Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 4 / 22
0.5 1 1.5 2 ·106 7 8 9 n time 10−6 · n ln n Java 6 Library Java 7 Library Normalized Java runtimes (in ms). Average and standard deviation of 1000 random permutations per size. Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 4 / 22
0.5 1 1.5 2 ·106 7 8 9 n time 10−6 · n ln n Java 6 Library Java 7 Library Classic Quicksort Yaroslavskiy Normalized Java runtimes (in ms). Average and standard deviation of 1000 random permutations per size.
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 4 / 22
1
2
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 5 / 22
1
2
1
2
p q Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 5 / 22
3 comparisons per element
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 6 / 22
3 comparisons per element
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 6 / 22
3 of all elements are small
3 · 1 + 2 3 · 2 = 5 3 comparisons per element
5 3(n − 2) ∼ 20 12n comparisons on average?
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 7 / 22
3 of all elements are small
3 · 1 + 2 3 · 2 = 5 3 comparisons per element
5 3(n − 2) ∼ 20 12n comparisons on average?
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 7 / 22
12n comparisons only needed,
3 per elements on average
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 8 / 22
5
while k g
6
Ck if A[k] < p
7
Swap A[k] and A[ℓ] ; ℓ := ℓ + 1
8
else C′
k
if A[k] q
9
Cg while A[g] > q and k < g do g := g − 1 end while
10
Swap A[k] and A[g] ; g := g − 1
11
C′
g
if A[k] < p
12
Swap A[k] and A[ℓ] ; ℓ := ℓ + 1
13
end if
14
end if
15
k := k + 1
16
end while
k if needed q
g if needed < p
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 9 / 22
2 n(n−1)
5a · n ln n.
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 10 / 22
k resp. C′ g
k resp. C′ g reached?
k : all non- small elements reached by pointer k.
g : all non- large elements reached by pointer g.
3n comparisons in expectation
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 11 / 22
k l @ K: number of large elements at positions K.
g s @ G: number of small elements at positions G.
1
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 12 / 22
2
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 13 / 22
2
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 13 / 22
3
?? , 2
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 14 / 22
3
?? , 2
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 14 / 22
n−2 ∼ 1 6n
1 12n.
3n
6n
k
12n
g
19 12 n
12n.
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 15 / 22
D
3
10Dj ln Dj
Cn2
C
2231 360 − 361 600π2 = 0.25901. . . Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 16 / 22
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 17 / 22
28 15 − 19 100π2
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 18 / 22
0.2 0.4 0.6 0.8 1 0.2 0.4 0.6 0.8 1 α1 α2
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 19 / 22
0.2 0.4 0.6 0.8 1 0.2 0.4 0.6 0.8 1 α1 α2
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 19 / 22
5 · 19 12 n ln n = 1.9 n ln n on average.
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 20 / 22
5 · 19 12 n ln n = 1.9 n ln n on average.
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 20 / 22
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 21 / 22
Markus E. Nebel Java 7’s Dual Pivot Quicksort 2013/18/5 22 / 22