二分查找 python

python

# binary search
def binary_search(lst, x):
    lst.sort()
    if len(lst) >= 1:
        pivot = (len(lst)-1) // 2
        if lst[pivot] == x:
            return True
        elif lst[pivot] > x:
            return binary_search(lst[:pivot], x)
        elif lst[pivot] < x:
            return binary_search(lst[pivot+1:], x)
    return False

def binary_search2(lst, x):
    lst.sort()
    head = 0
    tail = len(lst)-1
    while head <= tail: #[3,4,3][3,4,3]
        pivot = (head + tail) // 2
        if lst[pivot]>x:
            tail = pivot - 1
        elif lst[pivot]<x:
            head = pivot + 1
        elif lst[pivot] == x:
            return True
    return False
if __name__ == '__main__':
    lst = [5, 3, 1, 8, 9, 10]
    print(binary_search(lst, 3))
    print(binary_search(lst, 100))

    print(binary_search2(lst, 8))
    print(binary_search2(lst, 100))
True
False
True
False

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shashank497

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值