blob: d2f5c74b2a32bb2e077f81c055b9ebc54c591eff (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <stdlib.h>
void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) {
const char *v, *r;
int res;
r=base+(nmemb-1)*size;
do {
register int num=nmemb/2;
v=base+num*size;
if ((res=compar(key,v))<0) {
r=v-size;
nmemb=num;
} else {
if (res==0) return (void*)v;
base=v+size;
nmemb-=num;
}
} while ((char*)base<=r);
return 0;
}
|