bsearch(3) Library Functions Manual bsearch(3)

bsearch - binarnie przeszukuje posortowaną tablicę

Standardowa biblioteka C (libc-lc)

#include <stdlib.h>
void *bsearch(const void key[.size], const void base[.size * .n],
              size_t n, size_t size,
              typeof(int (const void [.size], const void [.size]))
                  *compar);

The bsearch() function searches an array of n objects, the initial member of which is pointed to by base, for a member that matches the object pointed to by key. The size of each member of the array is specified by size.

Zawartość tablicy powinna być posortowana w kolejności rosnącej zgodnie z funkcją porównawczą wskazywaną przez compar. Funkcja compar powinna przyjmować dwa argumenty: wskaźnik do obiektu key oraz do elementu tablicy i powinna zwracać liczbę całkowitą mniejszą od zera, równą zeru lub większą niż zero, jeśli obiekt key okazał się, odpowiednio, mniejszy, równy lub większy niż element tablicy.

Funkcja bsearch() zwraca wskaźnik do pasującego elementu tablicy lub NULL, jeśli nie znaleziono takiego elementu. Jeśli istnieje więcej takich elementów, to nie jest określone, na który element będzie wskazywać zwrócony wskaźnik.

Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

Interfejs Atrybut Wartość
bsearch() Bezpieczeństwo wątkowe MT-bezpieczne

C11, POSIX.1-2008.

POSIX.1-2001, C89, C99, SVr4, 4.3BSD.

Poniższy przykład najpierw sortuje tablicę struktur, używając qsort(3), a następnie pobiera żądane elementy, używając bsearch().

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ARRAY_SIZE(arr)  (sizeof((arr)) / sizeof((arr)[0]))
struct mi {
    int         nr;
    const char  *name;
};
static struct mi  months[] = {
    { 1, "sty" }, { 2, "lut" }, { 3, "mar" }, { 4, "kwi" },
    { 5, "maj" }, { 6, "cze" }, { 7, "lip" }, { 8, "sie" },
    { 9, "wrz" }, {10, "lis" }, {11, "paz" }, {12, "gru" }
};
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, ARRAY_SIZE(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, ARRAY_SIZE(months),
                      sizeof(months[0]), compmi);
        if (res == NULL)
            printf("'%s': nieznany miesiąc\n", argv[i]);
        else
            printf("%s: miesiąc #%d\n", res->name, res->nr);
    }
    exit(EXIT_SUCCESS);
}

hsearch(3), lsearch(3), qsort(3), tsearch(3)

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Adam Byrtek <alpha@irc.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

13 grudnia 2024 r. Linux man-pages 6.12