TOPICS
Search

Quicksort


Quicksort is the fastest known comparison-based sorting algorithm (on average, and for a large number of elements), requiring O(nlgn) steps. Quicksort is a recursive algorithm which first partitions an array {a_i}_(i=1)^n according to several rules (Sedgewick 1978):

1. Some key nu is in its final position in the array (i.e., if it is the jth smallest, it is in position a_j).

2. All the elements to the left of a_j are less than or equal to a_j. The elements a_1, a_2, ..., a_(j-1) are called the "left subfile."

3. All the elements to the right of a_j are greater than or equal to a_j. The elements a_(j+1), ..., a_n are called the "right subfile."

Quicksort was invented by Hoare (1961, 1962), has undergone extensive analysis and scrutiny (Sedgewick 1975, 1977, 1978), and is known to be about twice as fast as the next fastest sorting algorithm. In the worst case, however, quicksort is a slow n^2 algorithm (and for quicksort, "worst case" corresponds to already sorted).

The average time T_n for the algorithm to sort a list of n items arranged in random order is given by the recurrence equation

 T_n=n+2/nsum_(k=0)^(n-1)T_k
(1)

with T_0=0 (Havil 2003, p. 129). This recurrence can be rewritten as

 nT_n=(n+1)T_(n-1)+2n-1,
(2)

which has solution

 T_n=2(n+1)H_n-3n,
(3)

where H_n is a harmonic number. For n=0, 1, ..., the first few values are 0, 1, 3, 17/3, 53/6, 62/5, 163/10, ... (OEIS A093418 and A096620).

This has asymptotic behavior

 T_n∼1-3n+2(n+1)gamma+5/(6n)+2(n+1)lnn,
(4)

where gamma is the Euler-Mascheroni constant, which means that T_n∼O(nlnn) (Havil 2003, p. 130).


See also

Heapsort, Sorting

Explore with Wolfram|Alpha

References

Aho, A. V.; Hopcroft, J. E.; and Ullmann, J. D. Data Structures and Algorithms. Reading, MA: Addison-Wesley, pp. 260-270, 1987.Havil, J. "Quicksort." §13.8 in Gamma: Exploring Euler's Constant. Princeton, NJ: Princeton University Press, pp. 128-130, 2003.Hoare, C. A. R. "Partition: Algorithm 63," "Quicksort: Algorithm 64," and "Find: Algorithm 65." Comm. ACM 4, 321-322, 1961.Hoare, C. A. R. "Quicksort." Computer J. 5, 10-15, 1962.Knuth, D. E. The Art of Computer Programming, Vol. 3: Sorting and Searching, 2nd ed. Reading, MA: Addison-Wesley, pp. 113-122, 1998.Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; and Vetterling, W. T. "Quicksort." §8.2 in Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed. Cambridge, England: Cambridge University Press, pp. 323-327, 1992.Sedgewick, R. Quicksort. Ph.D. thesis. Stanford Computer Science Report STAN-CS-75-492. Stanford, CA: Stanford University, May 1975.Sedgewick, R. "The Analysis of Quicksort Programs." Acta Informatica 7, 327-355, 1977.Sedgewick, R. "Implementing Quicksort Programs." Comm. ACM 21, 847-857, 1978.Sloane, N. J. A. Sequences A093418 and A096620 in "The On-Line Encyclopedia of Integer Sequences."

Referenced on Wolfram|Alpha

Quicksort

Cite this as:

Weisstein, Eric W. "Quicksort." From MathWorld--A Wolfram Web Resource. https://mathworld.wolfram.com/Quicksort.html

Subject classifications