bsearch
Führt eine binäre Suche eines sortierten Arrays aus. Eine sicherere Version dieser Funktion ist verfügbar; siehe bsearch_s
.
Syntax
void *bsearch(
const void *key,
const void *base,
size_t num,
size_t width,
int ( __cdecl *compare ) (const void *key, const void *datum)
);
Parameter
key
Zeigen Sie auf den Schlüssel, nach dem gesucht werden soll.
base
Zeigen Sie auf die Basis der Suchdaten.
number
Anzahl der Elemente.
width
Breite der Elemente.
compare
Rückruffunktion, die zwei Elemente vergleicht. Der erste ist ein Zeiger auf den Schlüssel für die Suche, und die zweite ist ein Zeiger auf das Arrayelement, das mit dem Schlüssel verglichen werden soll.
Rückgabewert
bsearch
gibt einen Zeiger auf ein Vorkommen von key
in dem Array zurück, auf das base
verweist. Wenn key
nicht gefunden wird, gibt die Funktion zurück NULL
. Wenn sich das Array nicht in aufsteigender Sortierreihenfolge befindet oder doppelte Datensätze mit identischen Schlüsseln enthält, ist das Ergebnis unvorhersehbar.
Hinweise
Die bsearch
-Funktion führt eine binäre Suche eines sortierten Arrays aus number
Elementen aus, von denen jedes width
Bytes groß ist. Der base
-Wert ist ein Zeiger auf die Basis des zu durchsuchenden Arrays, und key
ist der gesuchte Wert. Der compare
Parameter ist ein Zeiger auf eine vom Benutzer bereitgestellte Routine, die den angeforderten Schlüssel mit einem Arrayelement vergleicht. Es gibt einen der folgenden Werte zurück, die ihre Beziehung angeben:
Von der compare -Routine zurückgegebener Wert |
Beschreibung |
---|---|
< 0 |
Der Schlüssel ist kleiner als das Arrayelement. |
0 |
Schlüssel und Arrayelement sind gleich. |
> 0 |
Der Schlüssel ist größer als das Arrayelement. |
Diese Funktion überprüft ihre Parameter. Wenn compare
oder number
ist NULL
base
NULL
und ist und number
ist nicht 0, oder wenn width
null, ruft die Funktion den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. key
Wenn die weitere Ausführung zugelassen wird, wird errno
auf EINVAL
festgelegt, und die Funktion gibt NULL
beschrieben.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Routine | Erforderlicher Header |
---|---|
bsearch |
<stdlib.h> und <search.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
Dieses Programm sortiert ein Zeichenfolgenarray mit „qsort“ und verwendet anschließend bsearch, um nach dem Wort „Katze“ zu suchen.
// crt_bsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>
int compare( char **arg1, char **arg2 )
{
/* Compare all of both strings: */
return _strcmpi( *arg1, *arg2 );
}
int main( void )
{
char *arr[] = {"dog", "pig", "horse", "cat", "human", "rat", "cow", "goat"};
char **result;
char *key = "cat";
int i;
/* Sort using Quicksort algorithm: */
qsort( (void *)arr, sizeof(arr)/sizeof(arr[0]), sizeof( char * ), (int (*)(const
void*, const void*))compare );
for( i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i ) /* Output sorted list */
printf( "%s ", arr[i] );
/* Find the word "cat" using a binary search algorithm: */
result = (char **)bsearch( (char *) &key, (char *)arr, sizeof(arr)/sizeof(arr[0]),
sizeof( char * ), (int (*)(const void*, const void*))compare );
if( result )
printf( "\n%s found at %Fp\n", *result, result );
else
printf( "\nCat not found!\n" );
}
cat cow dog goat horse human pig rat
cat found at 002F0F04