On the Adaptiveness of Quicksort

Gerth Stølting Brodal, Rolf Fagerberg, and Gabriel Moruz

In ACM Journal of Experimental Algorithmics, Special Issue of ALENEX 2005, volume 12(Article No. 3.2), 19 pages, 2008.

Abstract

Quicksort was first introduced in 1961 by Hoare. Many variants have been developed, the best of which are among the fastest generic sorting algorithms available, as testified by the choice of Quicksort as the default sorting algorithm in most programming libraries. Some sorting algorithms are adaptive, i.e. they have a complexity analysis that is better for inputs which are nearly sorted, according to some specified measure of presortedness. Quicksort is not among these, as it uses Ω(n log n) comparisons even for sorted inputs. However, in this paper we demonstrate empirically that the actual running time of Quicksort is adaptive with respect to the presortedness measure Inv. Differences close to a factor of two are observed between instances with low and high Inv value. We then show that for the randomized version of Quicksort, the number of element swaps performed is provably adaptive with respect to the measure Inv. More precisely, we prove that randomized Quicksort performs expected O(n(1+log (1+Inv/n))) element swaps, where Inv denotes the number of inversions in the input sequence. This result provides a theoretical explanation for the observed behavior, and gives new insights on the behavior of Quicksort. We also give some empirical results on the adaptive behavior of Heapsort and Mergesort.

Copyright notice

Copyright © 2008 by the Association for Computer Machinery, Inc.

Online version

jea08.pdf (554 Kb)

DOI

10.1145/1227161.1402294

BIBTEX entry

@article{jea08,
  author = "Gerth St{\o}lting Brodal and Rolf Fagerberg and Gabriel Moruz",
  doi = "10.1145/1227161.1402294",
  issn = "1084-6654",
  journal = "ACM Journal of Experimental Algorithmics, Special Issue of ALENEX 2005",
  number = "Article No. 3.2",
  pages = "19",
  title = "On the Adaptiveness of Quicksort",
  volume = "12",
  year = "2008"
}

Other versions