Pierre Maurette a écrit :
??
Vous ne confondriez pas le retour de bsearch(), un void* pointant vers l'élément ou un élément trouvé, ou (void*)0 si pas trouvé, et le prototype de la fonction de comparaison à fournir à bsearch() ?
Non, je ne confonds pas. La réponse de bsearch est binaire dans la mesure où si la clé n'est pas trouvée elle renvoie NULL et elle renvoie la position de la clé dans le cas inverse.
Mais dans la pratique, ainsi au hasard :
*) exemple 1 : on a une grande liste de nombres premiers et on eut l'utiliser pour écrire une fonction nextPrime ;
*) exemple 2 : on veut écrire un solveur de Boggle
quand on a une liste triée, on cherche souvent non pas à savoir si la clé est ou pas dans la liste mais à connaitre le ou les voisins immédiats de la clé. Pour répondre à cette question, on doit faire exactement ce que fait l'algorithme bsearch (en supposant qu'il s'agisse d'une recherche dichotomique ce que d'ailleurs la norme n'impose pas) donc le potentiel de l'implémentation bsearch n'est pas exploité. Ce n'est même pas que l'interface soit à reprendre, c'est plutôt le retour de bsearch qui ne me convient pas.