NAZWA¶
bsearch - binarne przeszukiwanie posortowanej tablicy
SKŁADNIA¶
#include <stdlib.h>
void *bsearch(const void *key, const void *base,
size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
OPIS¶
Funkcja
bsearch() przeszukuje tablicę obiektów
nmemb, której pierwszy element jest wskazywany przez
base, w poszukiwaniu elementu pasującego do obiektu wskazywanego
przez
key. Rozmiar każdego z elementów tablicy
określony jest przez
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.
WARTOŚĆ ZWRACANA¶
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.
ZGODNE Z¶
SVr4, 4.3BSD, POSIX.1-2001, C89, C99.
PRZYKŁAD¶
Poniższe 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>
struct mi {
int nr;
char *name;
} months[] = {
{ 1, "sty" }, { 2, "lut" }, { 3, "mar" }, { 4, "kwi" },
{ 5, "maj" }, { 6, "cze" }, { 7, "lip" }, { 8, "sie" },
{ 9, "wrz" }, {10, "paź" }, {11, "lis" }, {12, "gru" }
};
#define nr_of_months (sizeof(months)/sizeof(months[0]))
static int
compmi(const void *m1, const void *m2)
{
struct mi *mi1 = (struct mi *) m1;
struct mi *mi2 = (struct mi *) m2;
return strcmp(mi1->name, mi2->name);
}
int
main(int argc, char **argv)
{
int i;
qsort(months, nr_of_months, sizeof(struct mi), compmi);
for (i = 1; i < argc; i++) {
struct mi key, *res;
key.name = argv[i];
res = bsearch(&key, months, nr_of_months,
sizeof(struct mi), 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);
}
ZOBACZ TAKŻE¶
hsearch(3),
lsearch(3),
qsort(3),
tsearch(3)
O STRONIE¶
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux
man-pages. Opis projektu, informacje dotyczące zgłaszania
błędów, oraz najnowszą wersję
oryginału można znaleźć pod adresem
http://www.kernel.org/doc/man-pages/.
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man
są: Adam Byrtek (PTM) <abyrtek@priv.onet.pl>, Andrzej
Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl> i Robert Luberda
<robert@debian.org>.
Polskie tłumaczenie jest częścią projektu
manpages-pl; uwagi, pomoc, zgłaszanie błędów na
stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z
wersją
3.71 oryginału.