Added bsearch

This commit is contained in:
ceriel 1988-08-30 12:47:45 +00:00
parent ddc46385f3
commit d24592ee76
2 changed files with 52 additions and 0 deletions

View file

@ -33,6 +33,7 @@ monitor.c
perror.c perror.c
procentry.c procentry.c
qsort.c qsort.c
bsearch.c
rand.c rand.c
seekdir.c seekdir.c
sleep.c sleep.c

View file

@ -0,0 +1,51 @@
/* 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 );
}