二分查找(Binary Search),是一种效率较高的查找方法。在面试或算法竞赛中,查找相关的问题最优解通常就是二分查找。特别在现场面试中尤其重要,常用二分查找来考察面试者的编码能力和算法思维。
二分查找也称为折半查找。如果一个查找问题能够用一个条件消除一半的查找区域,那么就对目标在特定空间搜索,从而减少查找空间。 虽然二分查找思路比较直观,但大部分面试者通常在边界处理的时候考虑不全,从而出错。
有很多原因导致二分查找处理边界失败!例如,当目标位于数组第0
个索引时,或位于第(n - 1)
个索引时,程序进入死循环。
接下来,本问将对二分查找算法进行从零开始分析,总结出一套python实现二分查找的代码模板,并分析算法复杂度!
1. 算法模板
下面的代码是二分查找的一种标准实现方式:
left = 0
right = size of array # 数组的大小
while (left + 1 < right)
mid = (left + right) / 2 # 中间mid下标
if (array[mid] == target) # 检查已找到
return mid
else if (array[mid] < target)
continue search in right side # 在 右边区间搜索
else
continue search in left side # 在 左边区间搜索
if (array[left] == target) # 循环退出后进行判断