FENIX_libc/stdlib/bsearch.c

31 lines
562 B
C
Raw Normal View History

2020-12-02 05:37:18 +00:00
#include <stdlib.h>
void * bsearch(const void * key, const void * base, size_t nel, size_t width,
int (*compar)(const void *, const void*)) {
void * left;
void * right;
void * mid;
if(nel == 0 || base == NULL) {
return NULL;
}
left = base;
right = base + (nel * width);
while(left <= right) {
mid = (left + right) / 2;
int t = compar(key, mid);
if(t == 0) {
return mid;
}
else if(t < 0) {
right = mid - width;
}
else if(t > 0) {
left = mid + width;
}
}
return NULL;
}