Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Realiza una búsqueda binaria de una matriz ordenada. Hay disponible una versión más segura de esta función; consulte bsearch_s.
Sintaxis
void *bsearch(
const void *key,
const void *base,
size_t num,
size_t width,
int ( __cdecl *compare ) (const void *key, const void *datum)
);
Parámetros
key
Puntero a la clave que se va a buscar.
base
Puntero a la base de los datos de búsqueda.
number
Número de elementos.
width
Ancho de los elementos.
compare
Función de devolución de llamada que compara dos elementos. El primero es un puntero a la clave de la búsqueda y el segundo es un puntero al elemento de matriz que se va a comparar con la clave.
Valor devuelto
bsearch devuelve un puntero a una instancia de key de la matriz que baseseñala. Si key no se encuentra, la función devuelve NULL. Si la matriz no está en orden ascendente o contiene registros duplicados con claves idénticas, el resultado es imprevisible.
Comentarios
La función bsearch realiza una búsqueda binaria de una matriz ordenada de elementos number , cada uno de ellos con un tamaño de width bytes. El valor base es un puntero a la base de la matriz que se va a buscar y key es el valor buscado. El compare parámetro es un puntero a una rutina proporcionada por el usuario que compara la clave solicitada con un elemento de matriz. Devuelve uno de los valores siguientes que especifican su relación:
Valor devuelto por la rutina compare |
Descripción |
|---|---|
< 0 |
El valor de clave es menor que el elemento de matriz. |
0 |
El valor de clave es igual al elemento de matriz. |
> 0 |
El valor de clave es mayor que el elemento de matriz. |
Esta función valida sus parámetros. Si compare, o number es NULLo key si base es y es NULL distinto de ceronumber, o si width es cero, la función invoca al controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, errno está establecido en EINVAL y la función devuelve NULL.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Requisitos
| Routine | Encabezado necesario |
|---|---|
bsearch |
<stdlib.h> y <search.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
Este programa ordena una matriz de cadenas con qsort y, luego, usa bsearch para buscar la palabra "cat".
// 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