二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x
class Test
{
public:
int binary_search(int* arr, int len, int goal)
{
int low = 0;
int high = len -1;
while (low <= high)
{
int middle = (high - low) / 2 + low; // 直接使用(high + low) / 2 可能导致溢出
if (arr[middle] == goal)
return middle;
//在左半边
else if (arr[middle] > goal)
high = middle - 1;
//在右半边
else
low = middle + 1;
}
//没找到
return -1;
}
};
int main()
{
int arr[10] = {11,23,34,45,67,78,89,90,100,114};
int len = sizeof(arr)/sizeof(arr[0]);
Test test;
cout<<test.binary_search(arr,len,34);
return 0;
}