home *** CD-ROM | disk | FTP | other *** search
/ Dream 48 / Amiga_Dream_48.iso / Atari / c / sozobon-v2 / dlibsrc.lha / BSEARCH.C < prev    next >
C/C++ Source or Header  |  1988-10-04  |  729b  |  35 lines

  1. #include <stdio.h>
  2.  
  3. int    _bsearch;    /* index of element found, or where to insert */
  4.  
  5. char *bsearch(key, base, num, size, cmp)
  6.     register char *key;        /* item to search for */
  7.     register char *base;        /* base address */
  8.     int num;            /* number of elements */
  9.     register int size;        /* element size in bytes */
  10.     register int (*cmp)();        /* comparison function */
  11.     {
  12.     register int a, b, c, dir;
  13.  
  14.     a = 0;
  15.     b = num - 1;
  16.     while(a <= b)
  17.         {
  18.         c = (a + b) >> 1;    /* == ((a + b) / 2) */
  19.         if (dir = (*cmp)((base + (c * size)), key))
  20.             {
  21.             if (dir > 0)
  22.                 b = c - 1;
  23.             else /* (dir < 0) */
  24.                 a = c + 1;
  25.             }
  26.         else
  27.             {
  28.             _bsearch = c;
  29.             return(base + (c * size));
  30.             }
  31.         }
  32.     _bsearch = b;    
  33.     return(NULL);
  34.     }
  35.