利用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
效果还不错,两次都减少了一次 上一篇: 邮局问题(Java,输入输出文件)
下一篇: 参考学习封装Queue队列,先进先出
推荐阅读