>From 64d86f96fa404dbaa40de8a1979ecadca6add4ca Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 21 Jul 2018 17:34:00 -0700 Subject: [PATCH] bsearch: simplify and optimize --- src/stdlib/bsearch.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/stdlib/bsearch.c b/src/stdlib/bsearch.c index 61d89367..2a998cc6 100644 --- a/src/stdlib/bsearch.c +++ b/src/stdlib/bsearch.c @@ -7,14 +7,13 @@ void *bsearch(const void *key, const void *base, size_t nel, size_t width, int ( while (nel > 0) { try = (char *)base + width*(nel/2); sign = cmp(key, try); - if (!sign) return try; - else if (nel == 1) break; - else if (sign < 0) + if (sign < 0) nel /= 2; - else { - base = try; - nel -= nel/2; - } + else if (sign > 0) { + base = (char *)try + width; + nel -= nel/2+1; + } else + return try; } return NULL; } -- 2.17.1