python-初识二分法(一)

二分法

1、二分法核心图

image

2、二分法算法应用实例

  • 二分法是一种搜索效率比较高的算法,每次搜索会把范围缩小一半,最终获取到想要的结果

二分法基础运用,实例1如下:

import random
# 获取100以内的随机数
start_num =0
end_num = 100
while True:
     real_num = random.randint(0,100)
     num = int(input('please input your guess num>>>>:'))
     if num>real_num:
          end_num = num
          print(f'to big,范围是{start_num}~{end_num}')
     elif num < real_num:
          start_num = num
          print(f'to small,范围是{start_num}~{end_num}')
     else:
          print('guess right!')
          break
'''这个猜数字游戏,很好的运用了二分法的思想,
如果猜大了,那么就把输入的值当做范围的上限,
如果猜小了,那么就把输入值当做范围的下限'''

实例2如下:

# 用二分法在列表搜索值321,二分法查找必须有序
l = [11, 23, 43, 57, 68, 76, 81, 99, 111, 123,
     321, 432, 567, 666, 712, 899, 999, 1111]
# 排序
l.sort()
def binary_target(target_num, l):
    if len(l) == 0:
        print('没找到')
        return
    # 先获取中间位置索引值
    middle_index = len(l) // 2  
    # 判断中间索引对应的值比目标值大还是小
    if target_num > l[middle_index]:
        # 说明要找的元素只可能出现在列表的右侧
        l_right = l[middle_index + 1:]  
        print(l_right)
        binary_target(target_num, l_right)
    elif target_num < l[middle_index]:
        # 说明要找的元素只可能出现在列表的左侧
        l_left = l[:middle_index]
        print(l_left)
        binary_target(target_num, l_left)
    else:
        print('找到了', target_num)
binary_target(321,l)

查找过程图示:

image


学完的状态!
image


学完头脑分离···

posted @ 2021-11-18 22:35  HammerZe  阅读(108)  评论(0编辑  收藏  举报