Compartir a través de


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

Vea también

Referencia

Buscar y ordenar

bsearch

_lsearch