您应该查看Medians of Medians算法.这是一个线性时间算法,具有以下重现...
T(n) ? T(n/5) + T(7n/10) + O(n)
Run Code Online (Sandbox Code Playgroud)
......这是O(n).算法细节......
......还有一些伪代码......
MedianOfMedians (A[1],...,A[n])
begin
for i=1 to n/5 do {
let m_i be the median of A[5i ? 4], A[5i ? 3],..., A[5i];
}
pivot = Select(m1,...,m_n/5, n/10); // the pivot
return pivot
end
Run Code Online (Sandbox Code Playgroud)
参考
我希望这有帮助.
斯托伊奇