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