ExpertiDict

C · Intermediário · Inglês · Técnico

qsort

/ˈkjuː.sɔɹt/função

Função de stdlib.h que ordena um array de qualquer tipo, recebendo o tamanho de cada elemento e um ponteiro para função que compara dois elementos.

Onde usar

Como C não tem genéricos, qsort usa void * e um comparador. Em code review se procura o bug clássico de comparar por subtração, que pode estourar o int.

Em código

#include <stdlib.h>
static int cmp(const void *a, const void *b) {
  const int *x = a, *y = b;
  return (*x > *y) - (*x < *y);
}
// qsort(v, n, sizeof v[0], cmp);

Exemplos

Pass a comparator to qsort and cast the void pointers inside it.

Passe um comparador para o qsort e faça o cast dos void pointers dentro dele.

Your comparator subtracts, so it overflows on big values.

Seu comparador subtrai, então estoura com valores grandes.

Cuidado

Escrever o comparador como return *a - *b: com valores extremos ele estoura; prefira (x > y) - (x < y).

Sinônimos

ordenação genérica

Origem

Abreviação de quick sort, ordenação rápida.

Veja também

Todos os termos de C