#include void *bsearch(const void *key, const void *base, size_t nel, size_t width, int (*cmp)(const void *, const void *)) { void *try; int sign; while (nel > 0) { try = (char *)base + width*(nel/2); sign = cmp(key, try); if (sign < 0) { nel /= 2; } else if (sign > 0) { base = (char *)try + width; nel -= nel/2+1; } else { return try; } } return NULL; }