Пространства имён
Варианты
Действия

cpp/algorithm/partial sort — различия между версиями

Материал из cppreference.com
< cpp‎ | algorithm
(Import from dokuwiki)
 
 
(не показаны 7 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{title|partial_sort}}
+
{{
Синтаксис:
+
title|partial_sort}}
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
<syntaxhighlight lang="cpp">
+
, middle , )middle, )<
    #include <algorithm>
+
    void partial_sort( random_access_iterator start, random_access_iterator middle, random_access_iterator end );
+
    void partial_sort( random_access_iterator start, random_access_iterator middle, random_access_iterator end, StrictWeakOrdering cmp );
+
</syntaxhighlight>
+
  
Функция partial_sort() сортирует по возрастанию первые N элементов диапазона [start,end). N определено количеством элементов между итераторами start и middle.
+
 +
 +
элементов
 +
 +
 +
 +
 +
end
  
По умолчанию для сравнения двух элементов используется оператор <. Если нужна высокая точность, можно задать упорядочивающую функцию сравнения, используемую вместо <.
+
 +
  
Смотрите также: [[cpp/algorithm/binary_search | binary_search]], [[cpp/algorithm/is_sorted | is_sorted]], [[cpp/algorithm/nth_element | nth_element]], [[cpp/algorithm/partial_sort_copy | partial_sort_copy]], [[cpp/algorithm/sort | sort]], [[cpp/algorithm/stable_sort | stable_sort]]
+
 +
 +
 
 +
 +
 +
 +
 +
 +
 +
 +
 +
 
 +
 +
 +
 +
 
 +
 +
 +
 +
 +
 +
 +
 +
 +
 
 +
также
 +
 +
 +
 +
 +
 +
 
 +
:
 +
[[cpp/algorithm/]]
 +
[[cpp/algorithm/]]
 +
[[cpp/algorithm/]]
 +
[[cpp/algorithm/]]
 +
[[cpp/algorithm/sort
 +
sort]]
 +
[[cpp/algorithm/]]

Текущая версия на 05:00, 23 марта 2016

 
 
Библиотека алгоритмов
Ограниченные алгоритмы и алгоритмы над диапазонами (C++20)
Ограниченные алгоритмы, например ranges::copy, ranges::sort, ...
Политики исполнения (C++17)
Немодифицирующие операции над последовательностями
(C++11)(C++11)(C++11)
(C++17)
Модифицирующие операции над последовательностями
Операции разбиения
Операции сортировки
(C++11)
partial_sort
Операции двоичного поиска
Операции с наборами (в отсортированных диапазонах)
Операции с кучей
(C++11)
Операций минимума/максимума
(C++11)
(C++17)

Операции перестановки
Числовые операции
Операции с неинициализированной памятью
(C++17)
(C++17)
(C++17)
Библиотека C
 
Определено в заголовочном файле <algorithm>
template< class RandomIt >
void partial_sort( RandomIt first, RandomIt middle, RandomIt last );
(1)
template< class RandomIt, class Compare >
void partial_sort( RandomIt first, RandomIt middle, RandomIt last, Compare comp );
(2)

Сортирует часть элементов в диапазоне [first, last) в порядке возрастания. Первые middle - first отсортированные элементы находятся в диапазоне [first, middle). Не гарантируется сохранение порядка равных элементов. Порядок элементов в диапазоне [middle, last) не определен. Первый вариант использует operator< для сравнения элементов, вторая версия использует переданную функцию сравнения comp.

Содержание

[править] Параметры

first, last
диапазон элементов для сортировки
Оригинал:
the range of elements to sort
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
comp объект функции сравнения (т.е. объект, удовлетворяющий требованиям Compare), который возвращает true, если первый аргумент "меньше", чем второй.

Определение сравнения должно быть эквивалентно:

bool cmp(const Type1 &a, const Type2 &b);

Использование noexcept (начиная с C++11) желательно но не обязательно. Параметры не обязаны передаваться по const&, но не должны модифицироваться. Они должны быть способны принимать все значения типа (даже const) Type1 и Type2 независимо от категории значений (таким образом, Type1& не допускается, равно как и Type1, если только для Type1 перемещение не эквивалентно копированию (начиная с C++11)). Типы Type1 и Type2 должны быть таковы, что объект типа RandomIt может быть разыменован и затем неявно преобразован в оба из них.

Требования к типам
-
RandomIt должен соответствовать требованиям ValueSwappable и RandomAccessIterator.
-
The type of dereferenced RandomIt must meet the requirements of MoveAssignable and MoveConstructible.

[править] Возвращаемое значение

(Нет)

[править] Сложность

O(N·log2(N)), где N = std::distance(first, last) применения cmp. Если дополнительная память недоступна, то сложность O(N·log(N))
Оригинал:
O(N·log2(N)), where N = std::distance(first, last) applications of cmp. If additional memory is available, then the complexity is O(N·log(N))
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

#include <algorithm>
#include <functional>
#include <array>
#include <iostream>
 
int main()
{
    std::array<int, 10> s{5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
 
    std::partial_sort(s.begin(), s.begin() + 3, s.end());
    for (int a : s) {
        std::cout << a << " ";
    }
}

Вывод:

0 1 2 7 8 6 5 9 4 3

[править] См. также

копирует и частично сортирует диапазон элементов
(шаблон функции) [править]
сортирует диапазон элементов, сохраняя порядок между равными элементами
(шаблон функции) [править]
сортирует диапазон в порядке возрастания
(шаблон функции) [править]