bsearch - búsqueda binaria en un arreglo (array) ordenado
Biblioteca Estándar C (
libc,
-lc)
#include <stdlib.h>
void *bsearch(const void key[.size], const void base[.size * .nmemb],
size_t nmemb, size_t size,
int (*compar)(const void [.size], const void [.size]));
La función
bsearch() busca en un arreglo de
nmemb
elementos, donde el primer elemento está apuntado por
base, un
elemento que coincida con el objecto apuntado por
key. El tamaño
de cada elementos del arreglo es especificado por
size.
El contenido del arreglo debe estar ordenado en orden ascendente según la
función de comparación referenciada por
compar. Se espera
que la rutina
compar tenga dos argumentos que apunten al objeto
key y a un elemento del arreglo, en ese orden, y debe devolver un
entero menor, igual o mayor que cero si resulta que el objeto
key es
menor, igual o mayor (respectivamente) que el elemento del arreglo.
La función
bsearch() devuelve un puntero al elemento del arreglo
que coincide, o NULL si no hay coincidencia. Si hay múltiples elementos
que coinciden con la clave, el elemento devuelto está sin determinar.
Para obtener una explicación de los términos usados en esta
sección, véase
attributes(7).
Interfaz |
Atributo |
Valor |
bsearch() |
Seguridad del hilo |
Multi-hilo seguro |
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
The example below first sorts an array of structures using
qsort(3), then
retrieves desired elements using
bsearch().
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]))
struct mi {
int nr;
const char *name;
};
static struct mi months[] = {
{ 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
{ 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
{ 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
};
static int
compmi(const void *m1, const void *m2)
{
const struct mi *mi1 = m1;
const struct mi *mi2 = m2;
return strcmp(mi1->name, mi2->name);
}
int
main(int argc, char *argv[])
{
qsort(months, ARRAY_SIZE(months), sizeof(months[0]), compmi);
for (size_t i = 1; i < argc; i++) {
struct mi key;
struct mi *res;
key.name = argv[i];
res = bsearch(&key, months, ARRAY_SIZE(months),
sizeof(months[0]), compmi);
if (res == NULL)
printf("'%s': unknown month\n", argv[i]);
else
printf("%s: month #%d\n", res->name, res->nr);
}
exit(EXIT_SUCCESS);
}
hsearch(3),
lsearch(3),
qsort(3),
tsearch(3)
La traducción al español de esta página del manual fue
creada por Sebastian Desimone <
[email protected]> y Juan Pablo Puerta
<
[email protected]>
Esta traducción es documentación libre; lea la
GNU
General Public License Version 3 o posterior con respecto a las
condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página
del manual, envíe un correo electrónico a
[email protected]