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