《Python 每日一学》之二分法查找
2018-09-26 本文已影响26人
谢烟客
二分法查找
适用场景:
- 查找对象必须为有序集合,不然前置的排序工作影响较大
- 集合内的对象必须可任意访问,比如:链表就不适使用此方法
- 时间复杂度:O(log2n),n 表示元素个数
- 空间复杂度:S(n),n 表示元素个数
数学知识复习:
- log2n: log 以 2 为底 n 的对数
- 对数:如果 2 的 x 次方等于 n ,那么 x 就等于 log2n 的对数
代码实现:
def binary_search(needle, haystack):
min, max = 0, len(haystack) - 1
while min <= max:
midpoint = (min + max) // 2 # 向下取整数
guess = haystack[midpoint]
if guess == needle:
return midpoint
elif guess > needle:
max = midpoint - 1
else:
min = midpoint + 1
return None
- 交流可以加 QQ 群:397234385
- 或者 QQ 扫码入群: