1、Binary Search算法简介
二分查找,它的时间复杂度是 O(logn)。 其核心思想有点类似分治思想。
即每次都通过跟区间中的中间元素对比,将待查找的区间缩小为一半,直到找到要查找的元素,或者区间被缩小为 0。
但是二分查找的代码实现比较容易写错。你需要着重掌握它的三个容易出错的地方: 循环退出条件、mid 的取值,low 和 high 的更新 。
二分查找虽然性能比较优秀,但应用场景也比较有限。 底层必须依赖数组 ,并且还要求 数据是有序 的。对于较小规模的数据查找,我们直接使用顺序遍历就可以了,二分查找的优势并不明显。二分查找更适合处理 静态数据 ,也就是没有频繁的数据插入、删除操作。
2、代码详解
class Solution:
def bsearch(self, nums, target):
"""Binary search of a target in a sorted array
without duplicates. If such a target does not exist,
return -1, othewise, return its index.
"""
left, right = 0, len(nums)-1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
s = Solution()
a = [1,3,5,6,7,9,11]
print(s.bsearch(a, 7))