std:: qsort
|
Определено в заголовочном файле
<cstdlib>
|
||
|
void
qsort
(
void
*
ptr,
std::
size_t
count,
std::
size_t
size,
/* c-compare-pred */
*
comp
)
;
|
(1) | |
|
extern
"C"
using
/* c-compare-pred */
=
int
(
const
void
*
,
const
void
*
)
;
extern "C++" using /* compare-pred */ = int ( const void * , const void * ) ; |
(2) | ( только для демонстрации* ) |
Сортирует заданный массив, на который указывает ptr , в порядке возрастания. Массив содержит count элементов размером size байт каждый. Для сравнения объектов используется функция, на которую указывает comp .
Если comp указывает два элемента как эквивалентные, порядок их следования не определён.
Если тип элементов массива не является PODType (до C++11) TriviallyCopyable type (начиная с C++11) , поведение не определено.
Содержание |
Параметры
| ptr | - | указатель на массив для сортировки |
| count | - | количество элементов в массиве |
| size | - | размер каждого элемента массива в байтах |
| comp | - |
функция сравнения, которая возвращает отрицательное целое значение, если первый аргумент
меньше
второго, положительное целое значение, если первый аргумент
больше
второго, и ноль, если аргументы эквивалентны.
Сигнатура функции сравнения должна быть эквивалентна следующей: int cmp ( const void * a, const void * b ) ; Функция не должна изменять переданные ей объекты и должна возвращать согласованные результаты при вызове для одних и тех же объектов, независимо от их позиций в массиве. |
Возвращаемое значение
(нет)
Примечания
Несмотря на название, стандарты C++, C и POSIX не требуют, чтобы эта функция была реализована с использованием Quicksort и не дают никаких гарантий относительно сложности или стабильности.
Две перегрузки, предоставляемые стандартной библиотекой C++, различаются, поскольку типы параметра comp различны ( языковая линковка является частью его типа).
Пример
Следующий код сортирует массив целых чисел с помощью
qsort()
:
#include <array> #include <climits> #include <compare> #include <cstdlib> #include <iostream> int main() { std::array a{-2, 99, 0, -743, INT_MAX, 2, INT_MIN, 4}; std::qsort ( a.data(), a.size(), sizeof(decltype(a)::value_type), [](const void* x, const void* y) { const int arg1 = *static_cast<const int*>(x); const int arg2 = *static_cast<const int*>(y); const auto cmp = arg1 <=> arg2; if (cmp < 0) return -1; if (cmp > 0) return 1; return 0; } ); for (int ai : a) std::cout << ai << ' '; std::cout << '\n'; }
Вывод:
-2147483648 -743 -2 0 2 4 99 2147483647
Отчёты о дефектах
Следующие отчеты об изменениях поведения, содержащие исправления дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 405 | C++98 | элементы массива могли иметь любой тип | ограничено PODType |
Смотрите также
|
выполняет поиск элемента неопределённого типа в массиве
(функция) |
|
|
сортирует диапазон в порядке возрастания
(шаблон функции) |
|
|
(C++11)
(deprecated in C++26)
|
проверяет, является ли тип тривиальным
(шаблон класса) |
|
Документация C
для
qsort
|
|