1 思想
对于已排序的数值序列进行查找,查找过程中每比较一次middle值,将查找区间缩小一半!!直到找到数据or区间长度缩小为零。
2 代码
#include <iostream>
using namespace std;
bool g_invalid_input = 0; //错误标志
//二分法查找元素
//输入:array查找数组首地址, length数组长度, value待查找的数值
//返回:目标元素的下标值 0~(length - 1)
int mid_for_array(const int* array, int length, int value)
{
g_invalid_input = 0;
if ((NULL == array) || (length <= 0))
{
g_invalid_input = 1;
return -1;
}
int low = 0; //查找区间下界
int high = length - 1; //查找区间上界
int middle = (low + high)/2; //中间元素
while (low <= high)
{//二分查找流程
//1.value 等于 array[middle]
if (value == array[middle])
{
return middle;
}
//2.value 大于 array[middle]
if (value > array[middle])
{
low = middle + 1; //调整查找区间
}
//3.value 小于 array[middle]
if (value < array[middle])
{
high = middle; //调整查找区间
}
middle = (low + high)/2;
}
return -1;
}
int main(int argc, char const *argv[])
{
int array[] = {1, 2, 3, 4, 5, 6};
int res = mid_for_array(array, sizeof(array)/sizeof(int), 1);
cout << res << endl;
return 0;
}