二分查找:
1.首先找到列表中排在中间的元素,比较目标元素与该元素的大小,如果中间的元素等于目标元素,则返回True,否则返回False
2.如果目标元素比该元素大,则在中间元素与最后一个元素之间重复步骤1(在中间元素右边进行查找目标元素)
3.如果目标元素比该元素小,则在中间元素与第一个元素之间重复步骤1(在中间元素左边进行查找目标元素)
注意:进行二分查找的元素必须是有序的
二分查找实现代码如下:
def bin_search(arr,target):
length = len(arr)
mid = int(length / 2) # 找到中间元素(需要进行类型转换)
if target == arr[mid]: # 如果该元素等于目标元素
return True
if length == 1 and arr[0] != target: # 目标元素不存在
return False
if target > arr[mid]:
return bin_search(arr[mid+1:],target) # 在列表的右半边递归进行二分查找
else:
return bin_search(arr[:mid],target) # 在列表的左半边递归进行二分查找
data = [9,5,2,7,8,6]
data.sort()
print(bin_search(data,3))
代码的运行结果如下:
False
Process finished with exit code 0
备注:这种解法使用了递归的方式实现了二分查找,使用递归的好处是逻辑相对简单直观,当然我们也可以使用循环的方式来实现相同的功能。