stdlib.h


Función bsearch ANSI C

void *bsearch(const void *clave, const void *base,
   size_t nmemb, size_t tamanyo, 
   int (*comparar)(const void *, const void *));

Busca un array de nmemb objetos, el elemento inicial del que es apuntado por base, para un elemento que empareje el objeto apuntado por clave. El tamaño de cada elemento del array está especificado por tamanyo. La función de la comparación apuntada por comparar es llamada con dos argumentos que apuntan al objeto clave y a un elemento del array, en ese orden. La función retornará un entero menor, igual, o mayor que cero si el objeto clave es considerado, respectivamente a ser menor, igual, o mayor que el elemento del array. El array consistirá de: todos los elementos que comparan a ser menores, iguales, o mayores que el objeto clave, en ese orden.

Valor de retorno:

La función bsearch retorna un puntero a un elemento emparejado del array, o a un puntero nulo si ninguna pareja es encontrada. Si dos elementos comparados son iguales, el elemento emparejado no es especificado.

Ejemplo:

/* EJEMPLO */

/* Implementación del algoritmo quick-sort para la ordenación de vectores
** y bsearch para buscar ciertos elementos
*/

#include <stdlib.h>
#include <stdio.h>

#define ELEMENTOS 100

/* Prototipo de la función de comparar */
int comparar(const void *arg1, const void *arg2)
{
 if(*(int *)arg1 < *(int *)arg2) return -1;
   else if(*(int *)arg1 > *(int *)arg2) return 1;
   else return 0;
}

int main()
{
   int i, num;
   int lista[ELEMENTOS];
   int *elementoPtr;

   /* Contenido aleatorio */
   for(i = 0; i < ELEMENTOS; i++) lista[i] = rand() % 100 + 1;

   /* Quick-Sort */
   qsort(lista, ELEMENTOS, sizeof(lista[0]), comparar);

    /* Mostramos la lista ordenada */
   for(i = 0; i < ELEMENTOS; i++) printf("%d ", lista[i]);
   printf("\n");

   /* Ahora busquemos algunos elementos en la lista */
   puts( "Especifique un numero a encontrar dentro de la lista ordenada\n(un numero negativo para salir):" );
   scanf( "%d", &num );
   while( num >= 0 )
   {
      if( (elementoPtr = (int*)bsearch( &num, lista, ELEMENTOS, sizeof(lista[0]), comparar )) != NULL )
          printf( "Encontrado: %d\n", *elementoPtr );
      else
          printf( "No encontrado: %d\n", num );
      scanf( "%d", &num );
   }

   return 0;
}
/* FIN DE EJEMPLO */