I have recently found out that there exists a method called nth_element in the STL. To quote the description:
Nth_element is similar to
partial_sort, in that it partially
orders a range of elements: it
arranges the range [first, last) such
that the element pointed to by the
iterator nth is the same as the
element that would be in that position
if the entire range [first, last) had
been sorted. Additionally, none of the
elements in the range [nth, last) is
less than any of the elements in the
range [first, nth).
It claims to have O(n) complexity on average. How does the algorithm work? I could not find any explanation for it.
It’s called a selection algorithm and wikipedia has a decent page on it: http://en.wikipedia.org/wiki/Selection_algorithm
Also read about order statistics: http://en.wikipedia.org/wiki/Order_statistic