1 #include <stdlib.h> 2 #include <stdio.h> 3 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