折半查找法

int BinSearch(long num[], long x, int n)
{
    int low = 0, high = n-1, mid;
    while (low <= high)
    {
        mid = (high + low)/2;
        if (x > num[mid])
            low = mid + 1;
        else if (x < num[mid])
            high = mid - 1;
        else
            return mid;
    }
    return -1;
}

但是如果数组长度很大很大,使得low和high之和超出了limits.h中定义的有符号整数的极限值,那么执行到取数据中点时,就会发生数值溢出,导致mid成为负值。此时可以采用修改计算中间值的方法,用减法代替加法计算mid的值:

mid = low + (high - low) / 2;

你可能感兴趣的:(折半查找法)