Namespaces
Variants

std::qsort

De es.cppreference.net
 
 
Biblioteca de algoritmos
Algoritmos restringidos y algoritmos sobre rangos (C++20)
Algoritmos restringidos, p.ej. ranges::copy, ranges::sort, ...
Operaciones de secuencia no modificadoras    
Operaciones por lotes
(C++17)
Operaciones de búsqueda
Operaciones de secuencia modificadoras
Operaciones de copia
(C++11)
(C++11)
Operaciones de intercambio
Operaciones de transformación
Operaciones de generación
Operaciones de eliminación
Operaciones de cambio de orden
(hasta C++17)(C++11)
(C++20)(C++20)
Operaciones de muestreo
(C++17)

Operaciones de ordenación y relacionadas
Operaciones de particionado
(C++11)    

Operaciones de ordenación
Operaciones de búsqueda binaria
(en rangos particionados)
Operaciones de conjunto (en rangos ordenados)
Operaciones de fusión (en rangos ordenados)
Operaciones de montículo
Operaciones de mínimo/máximo
(C++11)
(C++17)
Operaciones de comparación lexicográfica
Operaciones de permutación


 
Definida en el encabezado <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) (solo para exposición*)

Ordena el array dado apuntado por ptr en orden ascendente. El array contiene count elementos de size bytes. La función apuntada por comp se utiliza para la comparación de objetos.

Si comp indica que dos elementos son equivalentes, su orden no está especificado.

Si el tipo de los elementos del array no es un PODType(hasta C++11)TriviallyCopyable tipo(desde C++11), el comportamiento no está definido.

Parámetros

ptr - puntero al array a ordenar
count - número de elementos en el array
size - tamaño de cada elemento en el array en bytes
comp - función de comparación que devuelve un valor entero negativo si el primer argumento es menor que el segundo, un valor entero positivo si el primer argumento es mayor que el segundo y cero si los argumentos son equivalentes.

La firma de la función de comparación debe ser equivalente a la siguiente:

int cmp(const void *a, const void *b);

La función no debe modificar los objetos que se le pasan y debe devolver resultados consistentes cuando se la llama para los mismos objetos, independientemente de sus posiciones en el array.

​

Valor de retorno

(ninguno)

Notas

A pesar del nombre, los estándares C++, C y POSIX no requieren que esta función se implemente usando Quicksort ni ofrecen garantías de complejidad o estabilidad.

Las dos sobrecargas proporcionadas por la biblioteca estándar de C++ son distintas porque los tipos del parámetro comp son distintos (language linkage es parte de su tipo).

Ejemplo

El siguiente código ordena un array de enteros usando 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';
}

Salida:

-2147483648 -743 -2 0 2 4 99 2147483647

Informes de defectos

Los siguientes informes de defectos que cambian el comportamiento se aplicaron retroactivamente a estándares C++ publicados anteriormente.

DR Aplicado a Comportamiento como se publicó Comportamiento correcto
LWG 405 C++98 los elementos del array podían tener cualquier tipo limitado a PODType

Véase también

busca un elemento de tipo no especificado en un array
(función)
ordena un rango de elementos
(plantilla de función & objeto función de algoritmo)
(C++11)(obsoleto en C++26)
comprueba si un tipo es trivial
(plantilla de clase)