В StackOverflow и в других местах есть много претензий, что nth_element
- O (n), и что он обычно реализуется с помощью Introselect: http://en.cppreference.com/w/cpp/algorithm/nth_element
Я хочу знать, как это может быть достигнуто. Я посмотрел на Википедию объяснение Introselect, и это просто оставило меня более смущенным. Как алгоритм переключается между QSort и Median-of-Medians?
Я нашел здесь статью Introsort: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.14.5196&rep=rep1&type=pdf Но это говорит:
В этой статье мы сосредоточимся на проблеме сортировки и кратко рассмотрим проблему выбора в следующем разделе.
Я попытался прочитать сам STL, чтобы понять, как nth_element
реализован, но он быстро завязывается.
Может ли кто-нибудь показать мне псевдокод для внедрения Introselect? Или даже лучше, реальный код на С++, отличный от STL, конечно:)