Namespaces
Variants

std::qsort

С ru.cppreference.net
 
 
Библиотека алгоритмов
Ограниченные алгоритмы и алгоритмы над диапазонами (C++20)
Ограниченные алгоритмы, например ranges::copy, ranges::sort, ...
Неизменяющие операции над последовательностями    
Пакетные операции
(C++17)
Операции поиска
Изменяющие операции над последовательностями
Операции копирования
(C++11)
(C++11)
Операции обмена
Операции преобразования
Операции заполнения
Операции удаления
Операции изменения порядка
(до C++17)(C++11)
(C++20)(C++20)
Операции выборки
(C++17)

Сортировка и связанные операции
Операции разделения
(C++11)    

Операции сортировки
Операции бинарного поиска
(по разделённым диапазонам)
Операции над множествами (на отсортированных диапазонах)
Операции слияния (на отсортированных диапазонах)
Операции с кучей
Операции минимума/максимума
(C++11)
(C++17)
Операции лексикографического сравнения
Операции перестановок


Политики выполнения (C++17)
(только для демонстрации*)(C++26)

Числовые операции
(C++11)
(C++17)
(C++17)    

Специализированные <memory> алгоритмы

Специализированные <random> алгоритмы
Библиотека C









 
Определён в заголовке <cstdlib>
void qsort( void *ptr, std::size_t count,
            std::size_t size, /* c-compare-pred */* comp );
void qsort( void *ptr, std::size_t count,
            std::size_t size, /* 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 типом(начиная с 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)(устарело в C++26)
проверяет, является ли тип тривиальным
(шаблон класса)