二分查找(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) # 循环退出后进行判断
return left
return -1
逐一分析下上面伪代码:
-
第1行:
0作为左边left索引。 -
第2行:数组大小作为右边
right索引。因此,当访问right索引,需要小心越界。 -
第4行:当
left和right之间没有元素时,while循环结束。因此,注意如果数组中仅有一个元素,将跳过这个循环,此时需要14行代码进行处理。 -
第14行: 在循环外检查
left索引上的元素,因为循环退出时,它可能是需要查找的数字target。
2. 编码实现
下面是完整的二分查找代码:
def
二分查找算法详解与Python实现

本文介绍了二分查找的算法模板、编码实现、核心细节及复杂度分析,通过Python代码和动画演示帮助理解。文章指出二分查找在面试和算法竞赛中的重要性,并强调了边界处理的常见错误。在最坏情况下,时间复杂度为O(log2 n),空间复杂度为O(1)。此外,还提供了进一步学习二分查找变形问题的资源。
最低0.47元/天 解锁文章
842

被折叠的 条评论
为什么被折叠?



