c二分查找的迭代实现

/*
 * @key: pointer to item being searched for
 * @base: pointer to first element to search
 * @num: number of elements
 * @size: size of each element
 * @cmp: pointer to comparison function
 */
void* bsearch(const void* key, const void* base, size_t num, size_t size, int (*cmp)(const void* key, const void* elt))
{
    size_t start = 0, end = num;
    int result;
    while (start < end) {
        size_t mid = start + (end - start) / 2;
        result = cmp(key, base + mid * size);
        if (result < 0)
            end = mid;
        else if (result > 0)
            start = mid + 1;
        else
            return (void*)base + mid * size;
    }
    return NULL;
}
原文地址:https://www.cnblogs.com/tongyishu/p/12221199.html