qsort
Realiza una ordenación rápida. Una versión más segura de esta función está disponible; vea qsort_s.
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
Parámetros
base
Inicio de la matriz de destino.num
Tamaño de la matriz de elementos.width
Tamaño del elemento en bytes.compare
Puntero a una rutina usuario- proporcionada que compara dos elementos de matriz y devuelve un valor que especifica la relación.
Comentarios
La función de qsort implementa un algoritmo de la rápido- ordenación para ordenar una matriz de elementos de num , cada uno de los bytes de width . El argumento base es un puntero a la base de la matriz que se ordenen. qsort sobrescribe esta matriz mediante los elementos ordenados.
qsort llama a la rutina de compare una o más veces durante la ordenación, y pasa punteros a dos elementos de la matriz en cada llamada.
compare( (void *) & elem1, (void *) & elem2 );
La rutina compara los elementos y devuelve uno de los valores siguientes.
Compare el valor devuelto de la función |
Descripción |
---|---|
< 0 |
elem1 es menor que elem2 |
0 |
equivalente deelem1 a elem2 |
> 0 |
elem1 es mayor que elem2 |
La matriz se ordena en sentido petición, definido por la función de comparación. Para ordenar una matriz en orden descendente, invierta el sentido de “mayor que” y “menor que” en la función de comparación.
Esta función valida sus parámetros. Si compare o num es NULL, o si base es NULL y *num es distinto de cero, o si width es menor que cero, se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros. Si la ejecución puede continuar, la función devuelve y errno se establece en EINVAL.
Requisitos
Rutina |
Encabezado necesario |
---|---|
qsort |
<stdlib.h y> search.h <> |
Para obtener información adicional de compatibilidad, vea Compatibilidad.
Ejemplo
// crt_qsort.c
// arguments: every good boy deserves favor
/* This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int compare( const void *arg1, const void *arg2 );
int main( int argc, char **argv )
{
int i;
/* Eliminate argv[0] from sort: */
argv++;
argc--;
/* Sort remaining args using Quicksort algorithm: */
qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );
/* Output sorted list: */
for( i = 0; i < argc; ++i )
printf( " %s", argv[i] );
printf( "\n" );
}
int compare( const void *arg1, const void *arg2 )
{
/* Compare all of both strings: */
return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}
Equivalente en .NET Framework
System::Collections::ArrayList::Sort