1 #include <stdlib.h>
2 #include <stdio.h>
3 void*
bsearch(const void * key,const void * base,size_t nmemb,size_t size,int (* compar)(const void *,const void *))4 bsearch(const void* key, const void* base, size_t nmemb, size_t size,
5 int (*compar)(const void*, const void*))
6 {
7 long i, bot, top, new;
8 void *p;
9
10 bot = 0;
11 top = bot + nmemb - 1;
12 while(bot <= top){
13 new = (top + bot)/2;
14 p = (char *)base+new*size;
15 i = (*compar)(key, p);
16 if(i == 0)
17 return p;
18 if(i > 0)
19 bot = new + 1;
20 else
21 top = new - 1;
22 }
23 return 0;
24 }
25