29 lines
		
	
	
		
			697 B
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			697 B
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | |
|  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | |
|  * See the copyright notice in the ACK home directory, in the file "Copyright".
 | |
|  */
 | |
| /* $Header$ */
 | |
| 
 | |
| #include	<stdlib.h>
 | |
| 
 | |
| void *
 | |
| bsearch(register const void *key, register const void *base,
 | |
| 	register size_t nmemb, register size_t size,
 | |
| 	int (*compar)(const void *, const void *))
 | |
| {
 | |
| 	register const void *mid_point;
 | |
| 	register int  cmp;
 | |
| 
 | |
| 	while (nmemb > 0) {
 | |
| 		mid_point = (char *)base + size * (nmemb >> 1);
 | |
| 		if ((cmp = (*compar)(key, mid_point)) == 0)
 | |
| 			return (void *)mid_point;
 | |
| 		if (cmp >= 0) {
 | |
| 			base  = (char *)mid_point + size;
 | |
| 			nmemb = (nmemb - 1) >> 1;
 | |
| 		} else
 | |
| 			nmemb >>= 1;
 | |
| 	}
 | |
| 	return (void *)NULL;
 | |
| }
 | 
