bsearch - binäre Suche in einem sortierten Feld (Array)
Standard-C-Bibliothek (
libc,
-lc)
#include <stdlib.h>
void *bsearch(const void Schlüssel[.groesse], const void Basis[.size * .nmemb],
size_t nmemb, size_t groesse,
int (*vergl)(const void [.groesse], const void [.groesse]));
Die Funktion
bsearch() durchsucht ein Feld von
nmemb Objekten nach
Übereinstimmung mit dem Objekt, auf das
Schlüssel zeigt.
Basis zeigt auf das erste Objekt des Felds;
groesse legt die
Größe der einzelnen im Feld enthaltenen Objekte fest.
Der Inhalt des Felds sollte gemäß der Vergleichsfunktion
vergl aufsteigend sortiert sein. Von
vergl wird erwartet, dass
sie zwei Argumente verarbeitet. Das erste Argument verweist auf das
Schlüssel-Objekt; das zweite auf ein Element des Arrays. Der
Rückgabewert sollte eine Ganzzahl kleiner, gleich oder
größer Null sein, je nachdem, ob das
Schlüssel-Objekt kleiner, gleich oder größer als
das Element des Felds ist.
Die Funktion
bsearch() gibt einen Zeiger auf ein passendes Feldelement
zurück oder NULL, wenn keine Übereinstimmung gefunden wurde.
Gibt es mehrere Treffer für
Schlüssel, ist nicht
definiert, auf welches Element der Zeiger weist.
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
bsearch() |
Multithread-Fähigkeit |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
Das folgende Beispiel sortiert zuerst mittels
qsort(3) ein Feld von
Strukturen und sucht dann mit
bsearch() nach dem gewünschten
Element.
#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 Monate[] = {
{ 1, "Jan" }, { 2, "Feb" }, { 3, "Mar" }, { 4, "Apr" },
{ 5, "Mai" }, { 6, "Jun" }, { 7, "Jul" }, { 8, "Aug" },
{ 9, "Sep" }, {10, "Okt" }, {11, "Nov" }, {12, "Dez" }
};
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(Monate, ARRAY_SIZE(Monate), sizeof(Monate[0]), compmi);
for (size_t i = 1; i < argc; i++) {
struct mi Schluessel;
struct mi *res;
Schluessel.Name = argv[i];
res = bsearch(&Schluessel, Monate, ARRAY_SIZE(Monate),
sizeof(Monate[0]), compmi);
if (res == NULL)
printf("»%s«: unbekannter Monat\n", argv[i]);
else
printf("%s: Monat #%d\n", res->Name, res->Index);
}
exit(EXIT_SUCCESS);
}
hsearch(3),
lsearch(3),
qsort(3),
tsearch(3)
Die deutsche Übersetzung dieser Handbuchseite wurde von Jens Rohler
<
[email protected]> und Martin Eberhard Schauer
<
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer