二分查找复杂度:O(logn)
递归实现:
template <typename T>
int BinarySearch(const T array[], int start, int end, const T& value)
{
if (start>end)
return -1;
int middle = (start + end) / 2;
if (array[middle] == value)
return middle;
else if (array[middle] < value)
return BinarySearch(array, middle+1, end, value);
else
return BinarySearch(array, start, middle-1, value);
};
非递归实现(迭代):
template <typename T>
int BinarySearch(const T array[], int start, int end, const T& value)
{
int result = -1;
while (start <= end)
{
int middle = (start + end) / 2;
if (array[middle] == value)
{
result = middle;
break;
}
if (array[middle] < value)
start = middle + 1;
else
end = middle - 1;
}
return result;
}
比较时也可使用int tmp=strcmp(array[middle],value),通过判断tmp的值作为条件
二分查找相关实现:
1.lower_bound和upper_bound
2.计算根号2的近似值
参考文章 点击跳转
该文章中还有一些有关二分查找的应用可供阅读