Namespaces
Variants

std:: qsort

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
qsort
Numeric operations
Operations on uninitialized memory
Определено в заголовочном файле <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 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)
проверяет, является ли тип тривиальным
(шаблон класса)