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;