非对称二分搜索

非对称二分搜索算法实现,具体好处见《C陷阱与缺陷》 P132 练习3-3

代码如下:

#include <stdio.h>
int * bsearch(int *a, int n, int key)
{
    int *left = a, *right = a + n;
    while(left < right)
    {
        int * mid = left + ((right - left) >> 1);
        if(key < *mid)
            right = mid;
        else if(key > *mid)
            left = mid + 1;
        else
            return mid;
    }
    return NULL;
}
int main()
{
    int n, key, i;
    int *a, *tmp, *end, *result;
    scanf("%d %d", &n, &key);
    a = (int *)malloc(sizeof(int) * (n + 1));
    tmp = a;
    end = a + n;
    for( ; tmp < end; tmp++)
        scanf("%d", tmp);
    result = bsearch(a, n, key);
    if(result)
        printf("成功找到, 该元素位置为 %d 该元素的值为 %d\n", result, *result);
    else
        printf("未找到该元素\n");
    free(a);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_38015368/article/details/80649392
今日推荐