算法之二分法

算法之二分法

什么是算法?

  解决问题的高效方法

二分法

  (入门级别:还有一定距离)

l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
# 第一种方式  直接for循环从左往右依次查找

# 第二种方式  二分法
"""
二分法能够使用的场景  数据集必须有序
"""
def my_partner(target_num, l):  # target_num=321  l=l
    if len(l) == 0:
        print('不好意思 我尽力 没找到')
        return
    # 先获取中间位置索引值
    middle_index = len(l) // 2  # 8
    # 判断中间索引对应的值比目标值大还是小
    if target_num > l[middle_index]:
        # 说明要找的元素只可能出现在列表的右侧
        l_right = l[middle_index + 1:]  # l[9:]
        print(l_right)
        my_partner(target_num, l_right)
    elif target_num < l[middle_index]:
        # 说明要找的元素只可能出现在列表的左侧
        l_left = l[:middle_index]
        print(l_left)
        my_partner(target_num, l_left)
    else:
        print('找到了', target_num)
my_partner(444, l)  找不到 需要添加结束条件
my_partner(11, l)  # 要查找的元素在开头  那么还没有依次查找的效率高

 

 

 

END

posted @ 2021-11-29 16:15  Snails蜗牛  阅读(110)  评论(0编辑  收藏  举报