python版二分搜索算法

本文详细介绍了二分搜索算法的工作原理,并通过实例演示了如何使用递归和迭代两种方式实现该算法。通过查找数组中特定元素的过程,展示了算法的具体步骤及效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先用图展示一下二分搜索算法的原理
二分搜索算法示意图(出自维基百科)


二分搜索算法又称为折半搜索,下面代码实现的是输出要搜索数据在数组中的位置和查找的次数:

算法的步骤:
给一个带有n个值的数组,数组A是从小到大的排列{A0,A1,…An-1}
需要查找T值在数组的中的位置
1、先令L为0,R为n-1
2、如果存在L>R,则不需进行搜索
3、令m(中间元素)为[(L+R)/2]
4、如果Am<T,令L=m+1返回第二步
5、如果Am>T,令R=m-1返回第二步
6、当Am=T时回传值m

#迭代版本

n=0
def dichotomy(arr,start,end,key):
    global n #如果要在函数中给全局变量赋值,需要用global关键字声明
    n+=1
    if end<start:
        return -1
    mid=start+int((end-start)/2)
    if arr[mid]<key:
        return dichotomy(arr,mid+1,end,key)
    elif arr[mid]>key:
        return dichotomy(arr,start,mid-1,key)
    else:
        return mid,n

#while的方法进行查找

def dichotomy_search(arr,start,end,key):
    n=0
    while start<=end:
        n+=1
        mid=start+int((end-start)/2)
        if arr[mid]<key:
            start=mid+1
        elif arr[mid]>key:
            end=mid-1
        else:
            return mid ,n

arr=[1,2,3,4,5,6,7,9,11,12,15,17,20,21,23]
a,b=dichotomy(arr,0,14,3)
print("方法一:\n查找的位置:%d\n查找的次数:%d\n"%(a,b))
c,d=dichotomy_search(arr,0,14,17)
print("方法二:\n查找的位置:%d\n查找的次数:%d\n"%(c,d))
输出的结果:

方法一:
查找的位置:2
查找的次数:4

方法二:
查找的位置:11
查找的次数:2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值