主题
Search

快速排序


快速排序是已知最快的基于比较的排序算法(平均而言,对于大量元素),需要 O(nlgn) 步。快速排序是一种递归算法,它首先根据几个规则(Sedgewick 1978)对数组 {a_i}_(i=1)^n 进行分区

1. 某个键 nu 在数组中的最终位置(即,如果它是第 j 个最小的,它在位置 a_j)。

2. 所有在 a_j 左侧的元素都小于或等于 a_j。元素 a_1a_2、...、a_(j-1) 被称为“左子文件”。

3. 所有在 a_j 右侧的元素都大于或等于 a_j。元素 a_(j+1)、...、a_n 被称为“右子文件”。

快速排序由 Hoare (1961, 1962) 发明,经过了广泛的分析和审查 (Sedgewick 1975, 1977, 1978),并且已知比次快的排序算法快大约两倍。然而,在最坏的情况下,快速排序是一种慢速的 n^2 算法(对于快速排序,“最坏情况”对应于已经排序)。

算法对随机顺序排列的 n 个项目列表进行排序的平均时间 T_n递归方程给出

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

其中 T_0=0 (Havil 2003, p. 129)。这个递归可以改写为

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

其解为

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

其中 H_n调和数。对于 n=0, 1, ...,前几个值是 0, 1, 3, 17/3, 53/6, 62/5, 163/10, ... (OEIS A093418A096620)。

这具有渐近行为

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

其中 gamma欧拉-马歇罗尼常数,这意味着 T_n∼O(nlnn) (Havil 2003, p. 130)。


另请参阅

堆排序, 排序

在 Wolfram|Alpha 中探索

参考文献

Aho, A. V.; Hopcroft, J. E.; 和 Ullmann, J. D. 数据结构与算法。 Reading, MA: Addison-Wesley, pp. 260-270, 1987.Havil, J. "快速排序。" §13.8 in Gamma: 探索欧拉常数。 Princeton, NJ: Princeton University Press, pp. 128-130, 2003.Hoare, C. A. R. "Partition: Algorithm 63," "Quicksort: Algorithm 64," 和 "Find: Algorithm 65." Comm. ACM 4, 321-322, 1961.Hoare, C. A. R. "Quicksort." Computer J. 5, 10-15, 1962.Knuth, D. E. 计算机程序设计艺术,第 3 卷:排序和搜索,第 2 版。 Reading, MA: Addison-Wesley, pp. 113-122, 1998.Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; 和 Vetterling, W. T. "快速排序。" §8.2 in FORTRAN 数值方法:科学计算的艺术,第 2 版。 Cambridge, England: Cambridge University Press, pp. 323-327, 1992.Sedgewick, R. 快速排序。 Ph.D. 论文。Stanford Computer Science Report STAN-CS-75-492. Stanford, CA: Stanford University, May 1975.Sedgewick, R. "快速排序程序分析。" Acta Informatica 7, 327-355, 1977.Sedgewick, R. "实现快速排序程序。" Comm. ACM 21, 847-857, 1978.Sloane, N. J. A. 序列 A093418A096620 in "整数序列在线百科全书。"

在 Wolfram|Alpha 中被引用

快速排序

请引用为

Weisstein, Eric W. "快速排序。" 来自 MathWorld--Wolfram Web 资源。 https://mathworld.net.cn/Quicksort.html

学科分类