РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
364 of 815 menu

Функция nth_element

Функция nth_element из заголовочного файла algorithm переставляет элементы диапазона так, чтобы на позиции, указанной итератором nth, оказался именно тот элемент, который стоял бы на этом месте после полной сортировки. При этом все элементы перед nth будут не больше него, а все элементы после - не меньше. В первый параметр мы передаем итератор на начало диапазона, во второй - итератор на позицию n-го элемента, в третий - итератор на конец диапазона, а в четвертый (необязательный) - функцию сравнения.

Функция не гарантирует, что элементы слева и справа от nth будут отсортированы между собой - только то, что они правильно разделены относительно n-го элемента. Это делает nth_element быстрее полной сортировки: в среднем она работает за линейное время.

Синтаксис

nth_element(first, nth, last) nth_element(first, nth, last, comp)

Пример

Давайте найдем медиану вектора, то есть элемент, который оказался бы в середине после сортировки:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v = {5, 1, 4, 2, 3}; nth_element(v.begin(), v.begin() + 2, v.end()); cout << v[2] << endl; return 0; }

Результат выполнения кода:

3

Пример

Давайте найдем второй по величине элемент вектора, поставив на предпоследнюю позицию нужный элемент:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; nth_element(v.begin(), v.begin() + 3, v.end()); cout << v[3] << endl; return 0; }

Результат выполнения кода:

4

Пример

Давайте используем свою функцию сравнения, чтобы найти n-й элемент по убыванию:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; nth_element(v.begin(), v.begin() + 1, v.end(), greater<int>()); cout << v[1] << endl; return 0; }

Результат выполнения кода:

4

Смотрите также

  • функция sort,
    которая сортирует весь диапазон
  • функция partial_sort,
    которая сортирует только часть диапазона
  • функция stable_sort,
    которая устойчиво сортирует диапазон
  • функция is_sorted,
    которая проверяет, отсортирован ли диапазон
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить