簡単にするために、と仮定します。位置での要素を見つけるために、線形時間の選択アルゴリズムを使用して2 m個- 1、2 m個- 2、2 m個- 3、... 、1。これには直線的な時間がかかります。所与のkは、検索tはそのようなことは2 T - 1 ≤ K ≤ 2 T。なお、2 トン ≤ 2 k個。ランクのすべての要素を最大2 t除外するn=2m2m−1,2m−2,2m−3,…,1kt2t−1≤k≤2t2t≤2k2t、線形時間選択アルゴリズムを使用して、時間O (2 t)= Oの位置にある要素を見つけますk。O(2t)=O(k)
明確化:前処理に時間がかかる注意しないと実際にそうなります。前処理を線形時間で行う方法は次のとおりです。Θ(nlogn)
while n > 0:
find the (lower) median m of A[0..n-1]
partition A in-place so that A[n/2-1] = m
n = n/2
インプレースパーティショニングは、クイックソートのように行われます。実行時間はで線形であるため、線形です。最終的に、配列Aは次の特性を満たします。各kに対して、A [ 0 .. n / 2 k − 1 ]はn / 2 k個の最小要素で構成されます。n+n/2+n/4+⋯+1<2nAkA[0..n/2k−1]n/2k