mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-27 18:06:27 +08:00
ee485372fe
* Fix Python code * Add the pythontutor blocks of the chapter tree, heap, graph, searching, sorting, divide and conquer, dynamic programming and greedy. Improve the pythontutor blocks of the chapter array and linkedlist and backtracking. Add the tutorial of pythontutor in how-to-read section. * Reduce the image's file size.
40 lines
1 KiB
Python
40 lines
1 KiB
Python
"""
|
|
File: binary_search_recur.py
|
|
Created Time: 2023-07-17
|
|
Author: krahets (krahets@163.com)
|
|
"""
|
|
|
|
|
|
def dfs(nums: list[int], target: int, i: int, j: int) -> int:
|
|
"""二分查找:问题 f(i, j)"""
|
|
# 若区间为空,代表无目标元素,则返回 -1
|
|
if i > j:
|
|
return -1
|
|
# 计算中点索引 m
|
|
m = (i + j) // 2
|
|
if nums[m] < target:
|
|
# 递归子问题 f(m+1, j)
|
|
return dfs(nums, target, m + 1, j)
|
|
elif nums[m] > target:
|
|
# 递归子问题 f(i, m-1)
|
|
return dfs(nums, target, i, m - 1)
|
|
else:
|
|
# 找到目标元素,返回其索引
|
|
return m
|
|
|
|
|
|
def binary_search(nums: list[int], target: int) -> int:
|
|
"""二分查找"""
|
|
n = len(nums)
|
|
# 求解问题 f(0, n-1)
|
|
return dfs(nums, target, 0, n - 1)
|
|
|
|
|
|
"""Driver Code"""
|
|
if __name__ == "__main__":
|
|
target = 6
|
|
nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]
|
|
|
|
# 二分查找(双闭区间)
|
|
index = binary_search(nums, target)
|
|
print("目标元素 6 的索引 = ", index)
|