Compartir a través de


qsort

Realiza una ordenación rápida. Hay disponible una versión más segura de esta función; consulte qsort_s.

Sintaxis

void qsort(
   void *base,
   size_t number,
   size_t width,
   int (__cdecl *compare )(const void *, const void *)
);

Parámetros

base
Inicio de la matriz de destino.

number
Tamaño de la matriz en elementos.

width
Tamaño del elemento en bytes.

compare
Puntero a una rutina proporcionada por el usuario que compara dos elementos de la matriz y devuelve un valor que especifica su relación.

Comentarios

La función qsort implementa un algoritmo de ordenación rápida para ordenar una matriz de number elementos, cada uno de width bytes. El argumento base es un puntero a la base de la matriz que se va a ordenar. qsort sobrescribe esta matriz usando los elementos ordenados.

qsort llama a la rutina compare una o varias veces durante la ordenación y pasa los punteros a dos elementos de la matriz en cada llamada. Si compare indica que dos elementos son iguales, no se especifica su orden en la matriz resultante.

compare(const void *elem1, const void *elem2);

La rutina compara los elementos y devuelve uno de los siguientes valores.

Valor devuelto por la función de comparación Descripción
< 0 elem1 es menor que elem2
0 elem1 equivalente a elem2
> 0 elem1 es mayor que elem2

La matriz se clasifica en orden ascendente, de acuerdo con la función de comparación. Para clasificar una matriz en orden decreciente, 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 number es NULL, o si base es y es NULL distinto de cero number , o si width es menor que cero, se invoca el controlador de parámetros no válidos, 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.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Routine Encabezado necesario
qsort <stdlib.h> y <search.h>

Para obtener más información sobre compatibilidad, consulte 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 );
}
boy deserves every favor good

Vea también

Búsqueda y ordenación
bsearch
_lsearch