欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用round函数的二分查找

程序员文章站 2021-12-23 21:07:42
...

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

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

一般情况下的实现方法中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
 效果还不错,两次都减少了一次
相关标签: 算法