数据结构应该是有序数组,下面写法是升序数组且无重复元素
class BinarySearch:
@staticmethod
def binary_search(arr: list[int], target):
start = 0
end = len(arr) - 1
while start <= end:
mid = start + ((end - start) >> 1)
if arr[mid] == target:
return mid
elif arr[mid] < target:
start = mid + 1
else:
end = mid - 1
return None
@staticmethod
# 将区间在每次递归时更新,所以要将区间范围,在形式参数中指定
def binary_search_recursion(arr: list[int], target, start, end):
if start > end:
return None
mid = start + ((end - start) >> 1)
if arr[mid] == target:
print(mid)
return mid
elif arr[mid] < target:
# 这里不带return会导致最底层递归获取到的mid无法接收。当然如果把mid放到一个可以存储的空间中也是可以的
return BinarySearch.binary_search_recursion(arr, target, mid + 1, end)
else:
return BinarySearch.binary_search_recursion(arr, target, start, mid - 1)
if __name__ == '__main__':
index = BinarySearch.binary_search([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12], 7)
print(index)
index = BinarySearch.binary_search_recursion([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12], 6, 0, 12)
print(index)
版权声明:本文为qq_38095787原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。