home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
300-399
/
ff319.lzh
/
CNewsSrc
/
cnews.orig.lzh
/
rna
/
lib
/
bsearch.c
next >
Wrap
Text File
|
1989-06-27
|
876b
|
35 lines
/*LINTLIBRARY*/
/*
* Binary search algorithm, generalized from Knuth (6.2.1) Algorithm B.
*
* Written by J. S. Rugaber; rewritten by L. Rosler, Dept. 45175, August, 1981.
*/
typedef char *POINTER;
POINTER
bsearch(key, base, nel, width, compar)
POINTER key; /* Key to be located */
POINTER base; /* Beginning of table */
unsigned nel; /* Number of elements in the table */
unsigned width; /* Width of an element (bytes) */
int (*compar)(); /* Comparison function */
{
int two_width = width + width;
POINTER last = base + width * (nel - 1); /* Last element in table */
while (last >= base) {
register POINTER p = base + width * ((last - base)/two_width);
register int res = (*compar)(key, p);
if (res == 0)
return (p); /* Key found */
if (res < 0)
last = p - width;
else
base = p + width;
}
return ((POINTER) 0); /* Key not found */
}