ref: 990ceeef3bfd9d56e2e6dd39cf5ac185b1a2de08
dir: /sys/src/ape/lib/ap/gen/bsearch.c/
#include <stdlib.h> #include <stdio.h> void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*)) { long i, bot, top, new; void *p; bot = 0; top = bot + nmemb - 1; while(bot <= top){ new = (top + bot)/2; p = (char *)base+new*size; i = (*compar)(key, p); if(i == 0) return p; if(i > 0) bot = new + 1; else top = new - 1; } return 0; }