123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #include <stdio.h>
- static int _bsearch;
- char *bsearch(key, base, num, size, cmp)
- register char *key;
- register char *base;
- int num;
- register int size;
- register int (*cmp) ();
- {
- register int a, b, c, dir;
- a = 0;
- b = num - 1;
- while (a <= b) {
- c = (a + b) >> 1;
- if ((dir = (*cmp) (key, (base + (c * size))))) {
- if (dir < 0)
- b = c - 1;
- else
- a = c + 1;
- } else {
- _bsearch = c;
- return (base + (c * size));
- }
- }
- _bsearch = b;
- return (NULL);
- }
|