二分查找–Python
最常见的算法之一
应对场景:元素升序排列的数组
- 精确查找
- 寻找上下边界
双指针法,时间复杂度O(logn)
def half_search(nums,target):
"""
双指针法,时间复杂度O(logn)
"""
l, r = 0, len(nums)-1
while l<=r:
mid =int(l+(r-l)/2)
#print('mid',mid)
if target<nums[mid]:
r=mid-1
elif target>nums[mid]:
l=mid+1
else:
return True
return False
if __name__=='__main__':
nums=[1,2,3,4,5]
target=4
print(half_search(nums,target))
递归法,时间复杂度O(logn)
def half_search(nums,target):
"""
递归法,时间复杂度O(logn)
"""
mid =(len(nums)-1)//2
if nums:
if target<nums[mid]:
return half_search(nums[:mid],target)
elif target>nums[mid]:
return half_search(nums[mid+1:],target)
else:
return True
else:
return False
if __name__=='__main__':
nums=[1,2,3,4,5]
target=5
print(half_search(nums,target))