bsearch.c 393 B

1234567891011121314151617181920
  1. #include <stdlib.h>
  2. void *bsearch(const void *key, const void *base, size_t nel, size_t width, int (*cmp)(const void *, const void *))
  3. {
  4. void *try;
  5. int sign;
  6. while (nel > 0) {
  7. try = (char *)base + width*(nel/2);
  8. sign = cmp(key, try);
  9. if (!sign) return try;
  10. else if (nel == 1) break;
  11. else if (sign < 0)
  12. nel /= 2;
  13. else {
  14. base = try;
  15. nel -= nel/2;
  16. }
  17. }
  18. return NULL;
  19. }