二分查找(一)

二分查找:
1.首先找到列表中排在中间的元素,比较目标元素与该元素的大小,如果中间的元素等于目标元素,则返回True,否则返回False
2.如果目标元素比该元素大,则在中间元素与最后一个元素之间重复步骤1(在中间元素右边进行查找目标元素)
3.如果目标元素比该元素小,则在中间元素与第一个元素之间重复步骤1(在中间元素左边进行查找目标元素)
注意:进行二分查找的元素必须是有序的

二分查找实现代码如下:

def bin_search(arr,target):
    length = len(arr)
    mid = int(length / 2) # 找到中间元素(需要进行类型转换)
    if target == arr[mid]: # 如果该元素等于目标元素
        return True
    if length == 1 and arr[0] != target: # 目标元素不存在
        return False
    if target > arr[mid]:
        return bin_search(arr[mid+1:],target) # 在列表的右半边递归进行二分查找
    else:
        return bin_search(arr[:mid],target) # 在列表的左半边递归进行二分查找
data = [9,5,2,7,8,6]
data.sort()
print(bin_search(data,3))

代码的运行结果如下:

False

Process finished with exit code 0

备注:这种解法使用了递归的方式实现了二分查找,使用递归的好处是逻辑相对简单直观,当然我们也可以使用循环的方式来实现相同的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值