二分法

# 算法:高效解决问题的方法
# 算法之二分法

# 需求:有一个按照从小到大顺序排列的数字列表
#      需要从该数字列表中找到一个我们需要的数字,如何做更加高效
nums = [-3, 4, 7, 10, 13, 21, 43, 77, 89]
find_num = 13


# 方法1:整体遍历效率低
# for num in nums:
#     if num == find_num:
#         print("ok")
#     break


# 方法2:二分法
def findnums(find_num, l):
    print(l)
    if len(l) == 0:
        print("找的值不存在")
        return
    if find_num < l[int(len(l) / 2)]:  # 实质上可以采用地板除  // 往下取整 print(3//2)  1
        # 在列表中左侧继续找,将列表切片操作,保留左边
        new_nums = l[0: int(len(l) / 2)]
        findnums(find_num, new_nums)
    elif find_num > l[int(len(l) / 2)]:
        # 在列表中右侧继续找,将列表切片操作,保留右边
        new_nums = l[int(len(l) / 2) + 1:]
        findnums(find_num, new_nums)
    # elif find_num == l[int(len(l) / 2)]:
    #     print("find ok")
    else:
        print("find ok")


findnums(7, nums)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值