алгоритм для nth_element

Недавно я обнаружил, что в STL существует метод с именем nth_element. Цитирую описание:

Nth_element похож на partial_sort в том, что он частично упорядочивает диапазон элементов: он упорядочивает диапазон [first, last) так, что элемент, на который указывает итератор nth, совпадает с элементом, который был бы в этой позиции, если бы весь диапазон [первый, последний) был отсортирован. Кроме того, ни один из элементов в диапазоне [n-й, последний) не меньше любого из элементов в диапазоне [первый, n-й).

Он утверждает, что в среднем имеет сложность O (n). Как работает алгоритм? Я не мог найти никакого объяснения этому.


person martinus    schedule 06.03.2010    source источник


Ответы (2)


Это называется алгоритмом выбора, и в Википедии есть приличная страница, посвященная этому: http://en.wikipedia.org/wiki/Selection_algorithm

Также читайте о статистике заказов: http://en.wikipedia.org/wiki/Order_statistic

person IVlad    schedule 06.03.2010

Скорее всего, алгоритм медианы медиан.

http://en.wikipedia.org/wiki/Selection_algorithm#Linear_general_selection_algorithm_-_.22Median_of_Medians_algorithm.22

person Dave Gamble    schedule 06.03.2010