選擇算法

在計算機科學中 ， 選擇算法是一種在列表或數組中找到第k個最小數字的算法 ； 這樣的數字被稱爲第k個順序統計量 。 該算法尋找的對象主要有三種 ： 最小 、 最大和中位數 。 已知存在O ( n ) （ 最壞情況下爲線性時間 ） 的選擇算法 ， 還有對於結構化數據可能有次線性的表現的算法 ； 在極端的情況下 ， 對於已排序數據是O ( 1 ) 。 選擇是一些更復雜問題的子問題 ， 如最近鄰和最短路徑問題 。 許多選擇算法是由排序算法推廣而來 ， 反之 ， 一些排序算法可由反覆應用選擇算法推導出來 。 最簡單的選擇算法是通過遍歷列表找到最小 （ 或最大 ） 的元素 ， 在此過程中跟蹤當前的最小 （ 或最大 ） 值 。 這種算法與選擇排序有關 。 相反地 ， 最困難的選擇算法是尋找中位數 ， 這必然需要n / 2的空間 。 事實上 ， 一個專門的中位選擇算法可用來構造一個一般選擇算法 ， 例如 。 已知最好的選擇算法是快速選擇 （ quickselect ） ， 它與快速排序有關 。 和快速排序類似 ， 它有漸進最佳的複雜度 ， 但是最壞情況的複雜度較差 。 不過這可以通過調整基準 （ pivot ） 的選擇來優化 。