【独習C】猿60【猿C言語教室 part6】
■ このスレッドは過去ログ倉庫に格納されています
0533デフォルトの名無しさん
NGNG探索範囲を半分にするのに、1ビット右シフト.....
lim-- はなんだろ。 100 49 24 11 5 2 0 ........
void *
bsearch(key, base0, nmemb, size, compar)
const void *key;
const void *base0;
size_t nmemb;
size_t size;
int (*compar)(const void *, const void *);
{
const char *base = base0;
size_t lim;
int cmp;
const void *p;
for (lim = nmemb; lim != 0; lim >>= 1) {
p = base + (lim >> 1) * size;
cmp = (*compar)(key, p);
if (cmp == 0)
return ((void *)p);
if (cmp > 0) {/* key > p: move right */
base = (char *)p + size;
lim--;
}/* else move left */
}
return (NULL);
}
■ このスレッドは過去ログ倉庫に格納されています