Partilhar via


qsort

Executa uma classificação rápida. Uma versão mais segura dessa função está disponível, confira qsort_s.

Sintaxe

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

Parâmetros

base
Início da matriz de destino.

number
Tamanho da matriz nos elementos.

width
Tamanho do elemento em bytes.

compare
Ponteiro para uma rotina fornecida pelo usuário que compara dois elementos de matriz e retorna um valor que especifica seu relacionamento.

Comentários

A função qsort implementa um algoritmo de classificação rápida para classificar uma matriz de elementos number, cada uma de bytes width. O argumento base é um ponteiro para a base da matriz a ser classificada. qsort substitui essa matriz usando os elementos classificados.

qsort chama a rotina compare uma ou mais vezes durante a classificação e passa ponteiros para dois elementos de matriz em cada chamada. Se compare indicar que dois elementos são iguais, a ordem deles na matriz classificada resultante não será especificada.

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

A rotina deve comparar os elementos e retornar um dos valores a seguir.

Comparar o valor retornado da função Descrição
< 0 elem1 é menor que elem2
0 elem1 é equivalente a elem2
> 0 elem1 é maior que elem2

A matriz é classificada em ordem crescente, conforme definido pela função de comparação. Para classificar uma matriz em ordem decrescente, inverta o sentido de “maior que” e “menor que” na função de comparação.

Essa função valida seus parâmetros. Se compare ou number for NULL, ou se base for NULL e number for diferente de zero, ou se width for menor que zero, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, a função retornará e errno será definida como EINVAL.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Requisitos

Rotina Cabeçalho necessário
qsort <stdlib.h> e <search.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// 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

Confira também

Pesquisando e classificando
bsearch
_lsearch