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 proporcionada por 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 menos que elem2 |
0 |
equivalente deelem1 a elem2 |
> 0 |
elem1 mayor que elem2 |
La matriz se ordena en sentido petición, como 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 es width 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:: colecciones:: ArrayList:: Ordenar