06-09 二分法

  • 这里的算法是基于函数递归的陈述拓展。
"""
# 什么是算法?
	高效解决问题的方法.

# 应用场景(9.18)

"""
# 需求: 有一个按照从小到大顺序排列的数字列表, 需要从该数字列表中找到我们的那一个数字, 如何做更高效?
# 注意: 这里列表是有顺序的。但是有一种情况就是你的列表是无序的。这个时候可以用内置方法sort或者内置函数sorted()进行排序以后, 再使用二分法查找.
nums = [-3, 4, 7, 10, 13, 21, 43, 77, 89]
def dechtotmy(find_value, li):
    # 如果这里没有找到,那么最后会返回一个空的列表,如果这里不基于判断. 下面会报错,下面的切片操作就不能正常进行.
    if not li:
        print("对不起, 没有这个值")
        return

    middle_index = len(li) // 2
    middle_value = li[middle_index]

    if find_value > middle_value:
        # 你要找到的值大于列表中间的值。所以我们取列表的右边
        new_li = li[middle_index + 1:]
        dechtotmy(find_value, new_li)
    elif find_value < middle_value:
        # 你要找到的值小于列表中间的值。所以我们取列表的左边。
        new_li = li[:middle_index]
        dechtotmy(find_value, new_li)
    else:
        print('OK! find it')

dechtotmy(7, nums)
posted @ 2020-03-26 21:09  给你加马桶唱疏通  阅读(87)  评论(0编辑  收藏  举报