Quando necessitar de um algoritmo de ordenação em um trabalho, na maratona de programação ou até mesmo para um serviço comercial e não ter disponibilidade de tempo para implementá-lo use o qsort. Ele já está pronto e é fácil de usar. Gostou da idéia ? Então vamos ao que interessa: Como usar!
Breve Descrição: Função pertencente à biblioteca stdlib.h que ordena um vetor usando o algoritmo quicksort.
Exemplo: qsort (vetor, numeroElementos, sizeof(vetor), compare);
O último parâmetro passado para esta função é o nome da função que irá determinar o critério de comparação. Sendo assim podemos ordenar qualquer tipo de dados, até mesmo structs através do qsort, basta “ensinar” para ele como fazer isso.
Exemplo de compare para inteiros:
Breve Descrição: Função pertencente à biblioteca stdlib.h que ordena um vetor usando o algoritmo quicksort.
Exemplo: qsort (vetor, numeroElementos, sizeof(vetor), compare);
O último parâmetro passado para esta função é o nome da função que irá determinar o critério de comparação. Sendo assim podemos ordenar qualquer tipo de dados, até mesmo structs através do qsort, basta “ensinar” para ele como fazer isso.
Exemplo de compare para inteiros:
int compare (const void * a, const void * b){
return ( *(int*)a - *(int*)b );
}
Exemplo de compare para um struct:struct Times{
char nome[21];
int vitorias,sets,pontosmarcados;
};
int compare(const void *a,const void *b){
Times *x=(Times*)a;
Times *y=(Times*)b;
/*criterios*/
if(x->vitorias!=y->vitorias)//1 - vitorias, maior primeiro
return y->vitorias-x->vitorias;
if(x->sets!=y->sets)//2 - sets, maior primeiro
return y->sets-x->sets;
if(x->pontosmarcados!=y->pontosmarcados)//3 - pontos marcados, maior primeiro
return y->pontosmarcados-x->pontosmarcados;
return (strcmp(x->nome,y->nome));//ordem alfabetica
}