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