二分查找

来源:互联网 发布:dagger 源码 编辑:程序博客网 时间:2024/06/05 14:53
#include <stdio.h>

int search(int low, int high, int a[], int key)
{
    if(low > high)
        return -1;
    int mid = low + (high-low)/2;
    if(a[mid] == key)
        return mid;
    return (a[mid] > key ? search(low,mid-1,a,key) : search(mid+1,high,a,key));

}

int main()
{
    int a[] = {12,23,4,56,77,99,134,52};
    int n = search(0, sizeof(a)/sizeof(int), a, 99);
    printf("%d\n", a[n]);
    return 0;
}



注意 int  mid = low + (high - low) / 2;这句,很多面试题目都有这个问题,这个主要是编程的细节问题,开始可能想到这样写:int mid = (low + high) / 2;但是 low,和high的值加起来之后有可能超出int的表示范围,从而使其成为负数。

0 0
原创粉丝点击