/* * bsearch.c */ #include void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*cmp) (const void *, const void *)) { while (nmemb) { size_t mididx = nmemb / 2; const void *midobj = base + mididx * size; int diff = cmp(key, midobj); if (diff == 0) return (void *)midobj; if (diff > 0) { base = midobj + size; nmemb -= mididx + 1; } else nmemb = mididx; } return NULL; }