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:
Exemplo de compare para um struct:
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 }
Belo post..
Parabéns..