二分查找优点是比较次数少,查找速度快,平均性能好,时间复杂度为O(lgn); 其缺点是要求待查表为有序表,且插入删除困难。因此,二分查找适用于不经常变动而查找频繁的有序列表。
int binarySearch(int* a, int len, int goal)
{
int low = 0;
int high = len -1;
while (low <= high)
{
int middle = (high - low) / 2 + low; // 直接使用(high + low) / 2 可能导致溢出
if (a[middle] == goal)
return middle;
else if (a[middle] > goal)
high = middle - 1;
else
low = middle + 1;
}
return -1;
}