bsearch(3)

NOME
bsearch - busca binária em um array ordenado

BIBLIOTECA
Biblioteca C Padrão (libc, -lc)

SINOPSE
#include <stdlib.h>

void *bsearch(size_t n, size_t size;
              const void chave[chave], const void base[tam * n],
              size_t n, size_t tam,
              typeof(int (const void [tam], const void [tam]))
                  *compar);

DESCRIÇÃO
A função bsearch() busca em um array de n objetos, a partir do membro inicial apontado por base, por um membro que corresponde ao objeto apontado por chave. O tamanho de cada membro do array é especificado por tam.

O conteúdo do array deve estar em ordem crescente de acordo com a função de comparação referenciada por compar. Espera-se que a rotina compar tenha dois argumentos que apontam para o objeto chave e para um membro do array, nesta ordem, e deve retornar um número inteiro menor, igual ou maior que zero se o objeto chave for descoberto, respectivamente, como sendo menor que, igual a ou maior que o membro do array.

VALOR DE RETORNO
A função bsearch() retorna um ponteiro para um membro correspondente do array, ou NULO se nenhuma correspondência foi encontrada. Se houver vários elementos que correspondem à chave, o elemento retornado é não especificado.

ATRIBUTOS
Para uma explicação dos termos usados nesta seção, consulte attributes(7).
Interface | Atributo | Valor
bsearch() | Thread safety | MT-Safe

PADRÕES
C11, POSIX.1-2008.

HISTÓRICO
POSIX.1-2001, C89, C99, SVr4, 4.3BSD.

EXEMPLOS
O exemplo abaixo primeiro classifica um array de estruturas usando qsort(3) e, em seguida, recupera os elementos desejados usando bsearch().

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define NITEMS(arr)  (sizeof((arr)) / sizeof((arr)[0]))

    struct mi {
        int         nr;
        const char  *name;
    };

    static struct mi  months[] = {
        { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
        { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
        { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
    };

    static int
    compmi(const void *m1, const void *m2)
    {
        const struct mi *mi1 = m1;
        const struct mi *mi2 = m2;

        return strcmp(mi1->name, mi2->name);
    }

    int
    main(int argc, char *argv[])
    {
        qsort(months, NITEMS(months), sizeof(months[0]), compmi);
        for (size_t i = 1; i < argc; i++) {
            struct mi key;
            struct mi *res;

            key.name = argv[i];
            res = bsearch(&key, months, NITEMS(months),
                          sizeof(months[0]), compmi);
            if (res == NULL)
                printf("'%s': unknown month\n", argv[i]);
            else
                printf("%s: month #%d\n", res->name, res->nr);
        }
        exit(EXIT_SUCCESS);
    }

VEJA TAMBÉM
hsearch(3), lsearch(3), qsort(3), tsearch(3)

TRADUÇÃO
A tradução para português brasileiro desta página man foi criada por Paulo César Mendes <drpc@ism.com.br>, André Luiz Fassone <lonely_wolf@ig.com.br> e Rafael Fontenelle <rafaelff@gnome.org>.

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 (https://www.gnu.org/licenses/gpl-3.0.html) ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores (debian-l10n-portuguese@lists.debian.org).