利用round函数的二分查找

二分查找是一种简单高效的搜索算法

不过前提必须为进行搜索的数组为有序的

一般情况下的实现方法中mid的取值为(low+high)/2的整数

但试想一下如果mid改为round值的话会不会提高搜索的效率呢

下面为一般情况的实现

 

def binary_search(a, t, debug=False):
    l = 0
    h = len(a)
    while l <= h:
        mid = (l + h) // 2
        if debug: print('law=', l, ';high=', h, ';mid=', mid, sep='')
        if a[mid] == t:
            return mid
        elif a[mid] < t:
            l = mid + 1
        else:
            h = mid - 1
    return -1

 下面为增加了round的实现

def binary_search_with_round(a, t, debug=False):
    l = 0
    h = len(a)
    while l <= h:
        mid = round((l + h) / 2)
        if debug:
            print('law=', l, ';high=', h, ';mid=', mid, sep='')
        if a[mid] == t:
            return mid
        elif a[mid] < t:
            l = mid + 1
        else:
            h = mid - 1
    return -1
 

对两种情况进行实验

if __name__ == '__main__':
    a = [1, 3, 4, 7, 9, 10, 11, 15]
    print(binary_search(a, 4, True))
    print(binary_search(a, 5, True))
    print(binary_search_with_round(a, 4, True))
    print(binary_search_with_round(a, 5, True))
 

最后得到的结果为

law=0;high=8;mid=4
law=0;high=3;mid=1
law=2;high=3;mid=2
2
law=0;high=8;mid=4
law=0;high=3;mid=1
law=2;high=3;mid=2
law=3;high=3;mid=3
-1
law=0;high=8;mid=4
law=0;high=3;mid=2
2
law=0;high=8;mid=4
law=0;high=3;mid=2
law=3;high=3;mid=3
-1
 效果还不错,两次都减少了一次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值