1#include <stdlib.h> 2 3void *bsearch(const void *key, const void *base, size_t nel, size_t width, int (*cmp)(const void *, const void *)) 4{ 5 void *try; 6 int sign; 7 while (nel > 0) { 8 try = (char *)base + width*(nel/2); 9 sign = cmp(key, try); 10 if (!sign) return try; 11 else if (nel == 1) break; 12 else if (sign < 0) 13 nel /= 2; 14 else { 15 base = try; 16 nel -= nel/2; 17 } 18 } 19 return NULL; 20} 21