Ordenando vetores com qsort()



Não seria ótimo, se houvesse uma função em C que ordenasse seus vetores do jeito que quisesse, sem precisar de um laço enorme para isso? Pois é existe na biblioteca padrão do C a função qsort(), que recebe um ponteiro para uma função de comparação totalmente personalizada para que seu vetor seja arrumado do jeito que queira. Para entender como essa mágica funciona, vamos fazer um exemplo de arrumação de números então inicie um novo arquivo c, inclua a biblioteca padrão:


#include<stdlib.h>

 Logo após crie nossa função personalizada que nesse caso será utilizada para ordenar valores inteiros em ordem crescente:




O funcionamento de qsort() é simples, ele compara pares de valores repedidamente  e se a posição deles estiver errada de acordo com nossa definição de arrumação ele inverte as posições dos elementos, faz isso retornando três valores diferentes: Se o primeiro valor for maior que o segundo o retorno será um número positivo, caso contrário retorna negativo e se forem iguais retorna 0. A assinatura da função qsort() é:

 qsort(void *array, size_t length, size_t item_size, int (*compar) (const void *, const void *));

Como primero parâmetro passamos um ponteiro para um array, o segundo é passado o tamanho do array, no terceiro parâmetro é passado o tamanho de cada elemento no array ou seja o tamanho do dado, e como último parâmetro qsort recebe um ponteiro para uma função que possui dois parâmetros void. Agora vamos terminar nosso programa criando a função main e definindo nosso vetor de inteiros:



Quando compilar e executar seu código terá o seguinte resultado:

Codigo compilado


Agora que já conhece o poder da qsort(), treine mais crie funções de comparação para arrumar vetores de strings, ordenar números em ordem decrescente e etc. Obrigado pela leitura e até a próxima.

0 comentários:

Postar um comentário