home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
fish
/
programming
/
mkid
/
src
/
bsearch.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-02-01
|
692b
|
37 lines
/* Copyright (c) 1986, Greg McGary */
static char sccsid[] = "@(#)bsearch.c 1.1 86/10/09";
char *bsearch();
/*
Binary search -- from Knuth (6.2.1) Algorithm B
*/
char *
bsearch(key, base, nel, width, compar)
char *key;
register char *base;
unsigned int nel;
int width;
int (*compar)();
{
register char *last;
register char *position;
register int result;
int width2;
width2 = width * 2;
last = &base[width * (nel - 1)];
while (last >= base) {
position = &base[width * ((last - base)/width2)];
if ((result = (*compar)(key, position)) == 0)
return position;
if (result < 0)
last = position - width;
else
base = position + width;
}
return (char *)0;
}