#include <stdlib.h> | |
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; | |
} |