二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表爲有序表,且插入刪除困難。因此,折半查找方法適用於不經常變動而查找頻繁的有序列表。二分查找的基本思想是將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;
}