bsearch - Recherche dichotomique dans un tableau trié
Bibliothèque C standard (
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 fonction
bsearch() recherche l'objet correspondant à
key, dans un tableau de
nmemb objets, commençant à
l'adresse
base. La taille de chaque élément du tableau
est indiquée dans
size.
Le contenu du tableau doit être trié en ordre croissant par
rapport à la fonction de comparaison référencée
par
compar. La routine
compar doit être capable de
recevoir deux arguments, le premier pointant sur l'objet
key, et le
second sur un élément du tableau (l'ordre des arguments est
toujours respecté par
bsearch). Cette routine doit retourner une
valeur entière respectivement inférieure, égale ou
supérieure à zéro si l'objet
key est
inférieur, égal, ou supérieur à
l'élément du tableau.
La fonction
bsearch() renvoie un pointeur sur l'élément du
tableau correspondant à celui recherché, ou NULL si aucun
élément ne correspond. Si plusieurs éléments du
tableau correspondent à la clé, celui qui est renvoyé
n'est pas spécifié.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
bsearch() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
L'exemple suivant trie d'abord un tableau de structures en utilisant
qsort(3), puis retrouve les éléments
désirés en utilisant
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 traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Jean-Baptiste Holcroft <
[email protected]> et Grégoire
Scano <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]