Artigo Acesso aberto Revisado por pares

Optimal Partitioning for Dual-Pivot Quicksort

2015; Association for Computing Machinery; Volume: 12; Issue: 2 Linguagem: Inglês

10.1145/2743020

ISSN

1549-6333

Autores

Martin Aumüller, Martin Dietzfelbinger,

Tópico(s)

Error Correcting Code Techniques

Resumo

Dual-pivot quicksort refers to variants of classical quicksort where in the partitioning step two pivots are used to split the input into three segments. This can be done in different ways, giving rise to different algorithms. Recently, a dual-pivot algorithm due to Yaroslavskiy received much attention, because it replaced the well-engineered quicksort algorithm in Oracle’s Java 7 runtime library. Nebel and Wild (ESA 2012) analyzed this algorithm and showed that on average it uses 1.9 n ln n + O ( n ) comparisons to sort an input of size n , beating standard quicksort, which uses 2 n ln n + O ( n ) comparisons. We introduce a model that captures all dual-pivot algorithms, give a unified analysis, and identify new dual-pivot algorithms that minimize the average number of key comparisons among all possible algorithms up to a linear term. This minimum is 1.8 n ln n + O ( n ). For the case that the pivots are chosen from a small sample, we include a comparison of dual-pivot quicksort and classical quicksort. Specifically, we show that dual-pivot quicksort benefits from a skewed choice of pivots. We experimentally evaluate our algorithms and compare them to Yaroslavskiy’s algorithm and the recently described 3-pivot quicksort algorithm of Kushagra et al. (ALENEX 2014).

Referência(s)