Обратите внимание, что мы используем модифицированный PARTITION
, которому присваивается индекс для оси, который будет использоваться в качестве последнего входного параметра.
Вы начинаете с KTH-QUANTILES(A, 1, n, 1, k-1, k)
KTH-QUANTILES(A, p, r, i, j, k)
n=A.length
m=floor((i+j)/2)
q=floor(m(n/k))
q=q-p+1
q=SELECT(A, p, r, q)
q=PARTITION(A, p, r, q)
if i<m
L=KTH-QUANTILES(A, p, q-1, i, m-1, k)
if m<j
R=KTH-QUANTILES(A, q+1, r, m+1, j, k)
return L U A[q] U R
Глубина дерева рекурсии составляет lg k
, поскольку разбиение выполняется вокруг медианы заданной статистики порядка (от i до j).
На каждом уровне дерева рекурсии имеется Θ (n)операции, поэтому время выполнения Θ (nlgk).