主題
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)。


另請參閱

堆排序, 排序

在 中探索

參考文獻

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 "整數序列線上百科全書。"

在 中被引用

快速排序

請引用為

Weisstein, Eric W. "快速排序。" 來自 Web 資源。 https://mathworld.tw/Quicksort.html

學科分類