From 04aba16c12148e03da87de2d71eff0f8e0ad85f3 Mon Sep 17 00:00:00 2001 From: Gitea Date: Tue, 1 Dec 2020 23:37:18 -0600 Subject: [PATCH] initial attempt, may need fixing --- stdlib/bsearch.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 stdlib/bsearch.c diff --git a/stdlib/bsearch.c b/stdlib/bsearch.c new file mode 100644 index 0000000..0926983 --- /dev/null +++ b/stdlib/bsearch.c @@ -0,0 +1,31 @@ +#include + +void * bsearch(const void * key, const void * base, size_t nel, size_t width, + int (*compar)(const void *, const void*)) { + void * left; + void * right; + void * mid; + + if(nel == 0 || base == NULL) { + return NULL; + } + + left = base; + right = base + (nel * width); + + while(left <= right) { + mid = (left + right) / 2; + int t = compar(key, mid); + if(t == 0) { + return mid; + } + else if(t < 0) { + right = mid - width; + } + else if(t > 0) { + left = mid + width; + } + } + + return NULL; +} \ No newline at end of file