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