Freigeben über


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 baseverweist. 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 compareoder number ist NULLbase 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 NULLbeschrieben.

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

Siehe auch

Suchen und Sortieren
_lfind
_lsearch
qsort