123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /* bsearch(3)
- *
- * Author: Terrence Holm Aug. 1988
- *
- *
- * Performs a binary search for a given <key> within a sorted
- * table. The table contains <count> entries of size <width>
- * and starts at <base>.
- *
- * Entries are compared using keycmp( key, entry ), each argument
- * is a (char *), the function returns an int < 0, = 0 or > 0
- * according to the order of the two arguments.
- *
- * Bsearch(3) returns a pointer to the matching entry, if found,
- * otherwise NULL is returned.
- */
- #define NULL (char *) 0
- char *bsearch( key, base, count, width, keycmp )
- char *key;
- char *base;
- unsigned int count;
- unsigned int width;
- int (*keycmp)();
- {
- char *mid_point;
- int cmp;
- while ( count > 0 )
- {
- mid_point = base + width * (count >> 1);
- cmp = (*keycmp)( key, mid_point );
- if ( cmp == 0 )
- return( mid_point );
- if ( cmp < 0 )
- count >>= 1;
- else
- {
- base = mid_point + width;
- count = (count - 1) >> 1;
- }
- }
- return( NULL );
- }
|