#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) return try ; else if (nel == 1) break; else if (sign < 0) nel /= 2; else { base = try ; nel -= nel / 2; } } return NULL; }