• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, int (*cmp)(const void *, const void *))
4 {
5 	void *try;
6 	int sign;
7 	while (nel > 0) {
8 		try = (char *)base + width*(nel/2);
9 		sign = cmp(key, try);
10 		if (sign < 0) {
11 			nel /= 2;
12 		} else if (sign > 0) {
13 			base = (char *)try + width;
14 			nel -= nel/2+1;
15 		} else {
16 			return try;
17 		}
18 	}
19 	return NULL;
20 }