Provided by:
manpages-de-dev_0.5-4.1ubuntu1_all 
BEZEICHNUNG
bsearch - Binäre Suche in einem sortierten Array
ÜBERSICHT
#include <stdlib.h>
void *bsearch(const void *key, const void *base, size_t nmemb,
size_t size, int (*compar)(const void *, const void *));
BESCHREIBUNG
bsearch() durchsucht ein Array mit einer Anzahl von nmemb Elementen,
auf dessen erstes Element base zeigt, nach einem Element, das mit dem
Objekt übereinstimmt, auf das key zeigt. Die Größe der einzelnen
Elemente des Arrays ist durch size festgelegt.
Der Inhalt des Arrays sollte gemäß der Vergleichsfunktion, auf die
compar verweist, aufsteigend sortiert sein. Die Funktion compar muss
zwei Argumente entgegennehmen. Das erste Argument verweist auf key und
das zweite auf ein Arrayelement. Der Rückgabewert sollte ein Integer
sein, der kleiner, gleich oder größer Null ist, falls das key-Objekt
kleiner, gleich oder größer als das Arrayelement ist.
RÜCKGABEWERT
Die Funktion bsearch() gibt einen Zeiger auf ein passendes Arrayelement
zurück, oder NULL wenn keine Übereinstimmung gefunden wurde. Gibt es
mehrere Elemente die auf key passen, ist das zurückgegebene Element
nicht spezifiziert.
BEISPIEL
Das folgende Beispiel sortiert zuerst ein Array von Strukturen mittels
qsort(3), und sucht dann nach dem gewünschten Element mit bsearch().
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct mi {
int nr;
char *name;
} 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" }
};
#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’: unknown month\n", argv[i]);
else
printf("%s: month #%d\n", res->name, res->nr);
}
return 0;
}
KONFORM ZU
SVID 3, 4.3BSD, ISO 9899 (C99)
SIEHE AUCH
hsearch(3), lsearch(3), qsort(3), tsearch(3).
12. März 2006 BSEARCH(3)