"candide" <candide@free.invalid> a écrit dans le message de news:
48e615d6$0$8937$426a74cc@news.free.fr...
Charlie Gordon a écrit :
/* bsearch function */
#include <stdlib.h>
void *(bsearch)(const void *key, const void *base,
size_t nelem, size_t size, _Cmpfun *cmp)
{ /* search sorted table by binary chop */
const char *p = base;
size_t n;
for (p = base, n = nelem; 0 < n; )
{ /* check midpoint of whatever is left */
const size_t pivot = n >> 1;
const char *const q = p + size * pivot;
const int val = (*cmp)(key, q);
if (val < 0)
n = pivot; /* search below pivot */
else if (val == 0)
return ((void *)q); /* found */
else
{ /* search above pivot */
p = q + size;
n -= pivot + 1;
}
}
return (NULL); /* no match */
}
T'as scanné le code ? t'as une version numérique du livre ? T'as quand
même pas recopié le code à la main, c'est copie conforme, aux espaces
près, de sa Figure 13.8 page 356 ?
Comme tu l'as remarqué, je suis du genre pointilleux sur les petits détails,
et l'espacement est une partie importante de la présentation et donc de la
lisibilité. Non je n'ai pas scanné le bouquin, j'ai bêtement demandé à
google codesearch de me trouver des sources qui contiennent "const char
*const q = p + size * pivot", bout de code passablement spécifique de
l'auteur. J'ai ainsi trouvé 2 packages qui réutilisent le code de Plauger,
dont un qui n'avait modifié que légèrement la présentation :
http://surf.de.uu.net/gnuland/atari/scc-3.0.tar.gz module
scc-3.0/src/ansi/stdlib/bsearch.c
J'ai ensuite remis les conventions discutables de Plauger pour pouvoir les
critiquer ;-)
--
Chqrlie.