Freigeben über


bsearch

Führt eine binäre Suche eines sortierte Arrays aus. Eine sicherere Version dieser Funktion ist verfügbar; finden Sie unter bsearch_s.

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
    Planen Sie für Suche für ein.

  • base
    Zeiger zur Basis von Suchendaten.

  • num
    Anzahl der Elemente.

  • width
    Breite von Elementen.

  • compare
    Rückruffunktion, die beiden Elemente verglichen. Das erste ist ein Zeiger auf die Schlüssel für die Suche und das zweite ein Zeiger mit der Schlüssel verglichen werden Arrayelement.

Rückgabewert

bsearch gibt einen Zeiger auf ein Vorkommen von key im Array zurück, das auf den durch base gezeigt wird. Wenn key nicht gefunden wird, wird NULL zurückgegeben. Wenn das Array nicht in aufsteigender Sortierreihenfolge ist oder doppelte Datensätze mit identischen Schlüssel enthält, ist das Ergebnis unvorhersehbar.

Hinweise

Die bsearch-Funktion führt eine binäre Suche eines sortierte Arrays num-Elemente, jedes von width Bytes an Größe aus. Der Wert base ist ein Zeiger zur Basis des zu durchsuchenden Arrays, und key ist der Wert, der gefunden wird. Der Parameter compare ist ein Zeiger auf eine vom Benutzer bereitgestellten Routine, die die angeforderten Schlüssel einem Arrayelement vergleicht und einen der folgenden Werte zurückgibt, die ihrer Beziehung eingeben:

Wert zurückgegeben durch compare Routine

Beschreibung

< 0

Schlüssel ist kleiner als Arrayelement.

0

Schlüssel entspricht Arrayelement.

> 0

Schlüssel ist größer Arrayelement.

Diese Funktion überprüft ihre Parameter. Wenn compare, key oder num ist NULL oder base und NULL ist *num ist ungleich 0 (null), oder, wenn width null ist, wird der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, wird errno auf EINVAL gesetzt, und die Funktion gibt NULL zurück.

Anforderungen

Routine

Erforderlicher Header

bsearch

<stdlib.h und> search.h <>

Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

Beispiel

Dieses Programm sortiert ein Zeichenfolgenarray mit qsort und verwendet dann bsearch, um das 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" );
}
  

.NET Framework-Entsprechung

System::Collections::ArrayList::BinarySearch

Siehe auch

Referenz

Suchen und Sortieren

_lfind

_lsearch

qsort