【算法】 二分法
二分法
文字解释
二分法查找用于有序的数列,取数列正中间的值与目标值比较,若小于目标值,说明目标值在右边的区域,
再到右边的区域中取中间的值进行比较,若中间的值大于目标值,说明目标值在左边的区域,再对左边的区域获取中间的值,
如此进行查找,每次查找应该切割数列,或者标记左右边界位置,否则无法做到划分区域
代码
def func(num_list, left_index, right_index, target_num):
# 当左边界大于右边界时 说明没有找到
if left_index > right_index:
print('没找到')
# 获取中间坐标及值
middle_index = (left_index + right_index) // 2
middle_value = num_list[middle_index]
if middle_value < target_num:
# 若小于目标值 则将左边界扩到当前中间位置的右边一位
func(num_list, middle_index + 1, right_index, target_num)
elif middle_value > target_num:
# 若大于目标值 则将右边界扩到当前中间位置的左边一位
func(num_list, left_index, middle_index - 1, target_num)
else:
# 不大不小 那就是找到了
print(f'找到了 在索引为{middle_index}的位置')
l1 = [1, 2, 3, 4, 5, 7, 8, 9, 12, 13, 24, 26, 43, 152]
left = 0
right = len(l1)
target_num = 1
func(l1, left, right, target_num)
浙公网安备 33010602011771号