算法学习笔记一一二分查找
什么是二分查找
二分查找也叫折半查找,是在有序数组查找特定元素的算法。算法的时间复杂度为O(logn)。
算法原理
- 定义一个有序数组, 初始化left数组第一个元素序号,right为数组最后一个元素序号,middle为left和right中间元素序号。
- 首先将要查找的元素val与list[middle]比较,若相等返回middle。
- 若val大于list[middle],则说明要查找的元素在middle右半边,对右半部分进行查找。left = middle + 1
- 若val小于list[middle],则说明要查找的元素在middle左半边,对左半部分进行查找。right = middle + 1
- 重复上述步骤,知道left < right (查找失败,数组中无此元素)。
示例代码(python)
def binary_search(list, val):
left = 0 # 数组的第一个元素
right = len(list) - 1 # 数组的最后一个元素
while left <= right:
middle = (left + right) // 2 # 向下取整
if val == list[middle]:
return middle
elif val > list[middle]:
left = middle + 1
elif val < list[middle]:
right = middle - 1
return -1