home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixlib36d / src / c / bsearch < prev    next >
Text File  |  1994-03-08  |  896b  |  50 lines

  1. #ifdef __STDC__
  2. static char sccs_id[] = "@(#) bsearch.c 1.1 " __DATE__ " HJR";
  3. #else
  4. static char sccs_id[] = "@(#) bsearch.c 1.1 26/9/90 HJR";
  5. #endif
  6.  
  7. /* bsearch.c (c) Copyright 1990 H.Rogers */
  8.  
  9. #ifdef __STDC__
  10. #include <stddef.h>
  11. #include <stdlib.h>
  12. #else
  13. #include "sys/types.h"
  14. void *bsearch ();
  15. #endif
  16.  
  17. #ifdef __STDC__
  18. void *
  19. bsearch (register const void *k, const void *v, register size_t n,
  20.      register size_t z, register int (*c) (const void *, const void *))
  21. #else
  22. void *
  23. bsearch (k, v, n, z, c)
  24.      register const void *k;
  25.      const void *v;
  26.      register size_t n;
  27.      register size_t z;
  28.      register int (*c) ();
  29. #endif
  30. {
  31.   register char *b, *m;
  32.   register int p;
  33.  
  34.   b = (char *) v;
  35.  
  36.   while (n)
  37.     {
  38.       m = b + ((n >> 1) * z);
  39.       p = (*c) (k, m);
  40.       if (!p)
  41.     return (m);
  42.       if (p > 0)
  43.     b = m + z, n = n - (n >> 1) - 1;
  44.       else
  45.     n = (n >> 1);
  46.     }
  47.  
  48.   return (0);
  49. }
  50.