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