std::qsort
Определено в заголовочном файле <cstdlib>
|
||
extern "C" void qsort( void *ptr, std::size_t count, std::size_t size, int (*comp)(const void *, const void *) ); |
||
extern "C++" void qsort( void *ptr, std::size_t count, std::size_t size, int (*comp)(const void *, const void *) ); |
||
Сортирует в порядке возрастания заданный массив, на который указывает ptr
. Этот массив должен содержать count
элементов, размером в size
байт. Функция, заданная по указателю comp
, используется для сравнения объектов.
Если функция comp
определила, что два элемента одинаковые, то их порядок будет не определён.
Содержание |
[править] Параметры
ptr | - | Указатель на массив для сортировки |
count | - | Количество элементов в массиве |
size | - | Размер каждого элемента в массиве |
comp | - | Функция, которая будет сравнивать объекты. Она возвращает отрицательное целое число, если первый аргумент этой функции меньше второго, положительное число, если первый аргумент больше второго, и наконец если они равны, то она возвращает 0.
Определение сравнивающей функции должно быть следующим: int cmp(const void *a, const void *b); Эта функция не должна модифицировать переданные ей объекты. |
[править] Возвращаемое значение
(нет)
[править] Примечание
Несмотря на имя, стандарт С++, Си или POSIX не требует, чтобы эта функция реализовывала алгоритм "быстрой сортировки" или давала каких-то гарантий по стабильности и степени сложности алгоритма.
Тип элементов массива должен быть TrivialType
(тривиальным типом), иначе поведение этой функции не определено.
Две перегрузки, предоставленные стандартной библиотекой C++ различны, так как типы параметра comp
различны (языковое связывание является частью типа)
[править] Пример
Следующий код сортирует массив элементов int, используя qsort()
.
#include <iostream> #include <cstdlib> #include <climits> int main() { int a[] = {-2, 99, 0, -743, 2, INT_MIN, 4}; constexpr std::size_t size = sizeof a / sizeof *a; std::qsort(a, size, sizeof *a, [](const void* a, const void* b) { int arg1 = *static_cast<const int*>(a); int arg2 = *static_cast<const int*>(b); if(arg1 < arg2) return -1; if(arg1 > arg2) return 1; return 0; // return (arg1 > arg2) - (arg1 < arg2); // Возможное сокращение кода // return arg1 - arg2; //Ошибочное сокращение (если присутствует INT_MIN) }); for(int ai : a) std::cout << ai << ' '; }
Вывод:
-2147483648 -743 -2 0 2 4 99
[править] См. также
Ищет в массиве элемент любого типа (функция) | |
сортирует диапазон в порядке возрастания (шаблон функции) | |
(C++11) |
проверяет, является ли тип тривиально Оригинал: checks if a type is trivial Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон класса) |
C documentation for qsort
|