bsearch.c 397 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 < 0) {
  10. nel /= 2;
  11. } else if (sign > 0) {
  12. base = (char *)try + width;
  13. nel -= nel/2+1;
  14. } else {
  15. return try;
  16. }
  17. }
  18. return NULL;
  19. }