bsearch
Führt eine binäre Suche in einem sortierten eindimensionalen Arrays aus.Eine sicherere Version dieser Funktion ist verfügbar. Weitere Informationen 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
Das Objekt, nach dem gesucht werden soll.base
Zeiger auf die Basis für Suche von Daten.num
Anzahl von Elementen.width
Breite von Elementen.compare
Rückruffunktion, die zwei Elemente verglichen.Das erste ist ein Zeiger auf die Schlüssel für die Suche und das zweite Element ist ein Zeiger auf den mit dem Schlüssel zu vergleichende Arrayelement.
Rückgabewert
bsearch gibt einen Zeiger auf ein Vorkommen von key im Array zurück, das durch basedargestellt wird.Wenn key nicht gefunden wird, gibt die Funktion NULLzurück.Wenn das Array nicht in aufsteigender Sortierreihenfolge oder doppelte Datensätze mit identischem Schlüssel enthält, lautet das Ergebnis unvorhersehbar.
Hinweise
Die bsearch-Funktion führt eine binäre Suche eines sortierten eindimensionalen Arrays num-Elemente, die jeweils von Bytes an width Größe aus.Der base-Wert ist ein Zeiger auf der Basis des zu durchsuchenden Array, und key ist der Wert, der nicht gefunden wird.Der compare-Parameter ist ein Zeiger auf eine benutzerdefinierte Routine, die den angeforderten Schlüssel auf ein Arrayelement verglichen und einen der folgenden Werte zurück, die deren Beziehung angeben:
Wert von compare Routine zurückgegeben wird. |
Beschreibung |
---|---|
< 0 |
Schlüssel ist kleiner als Arrayelement. |
0 |
Schlüssel entspricht Arrayelement. |
> 0 |
Schlüssel ist größer als Arrayelement. |
Diese Funktion überprüft seine Parameter.Wenn compare, key oder numNULList oder wenn baseNULL und ist *num ungleich 0 ist, oder wenn width (null) ist, wird der Ereignishandler aufgerufen, z. B. ungültige Parameter in Parametervalidierungbeschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, wird errno zu EINVAL festgelegt, und die Funktion gibt NULLzurück.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
bsearch |
<stdlib.h> und <search.h> |
Um Kompatibilität zusätzlichen Informationen 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::Auflistungen::ArrayList::BinarySearch