Python中实现二分查找的2种方法?
发布日期:2021-06-29 18:23:27
浏览次数:2
分类:技术文章
本文共 1390 字,大约阅读时间需要 4 分钟。
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!
小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
废话不多说,开始今天的题目:
问:Python中实现二分查找的2种方法?
答:在Python实现二分查找法有两种方法,分别用循环和递归方式。
二分查找法:搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。注意如果要想使用二分查找,前提必须是元素有序排列 。
下面分别来说说这两种方式:
1、循环方式
def binary_search_2(alist,item):
"""二分查找---循环版本""" n = len(alist) first = 0 last = n-1 while first <= last: mid = (first + last)//2 if alist[mid] ==item: return True elif item < alist[mid]: last = mid - 1 else: first = mid + 1 return Falseif __name__ == "__main__": a = [1,5,6,10,11,13,18,37,99] sorted_list_21 = binary_search_2(a, 18) print(sorted_list_21) //True sorted_list_22 = binary_search_2(a, 77) print(sorted_list_22) //False2、递归方式
def binary_search(alist,item):
"""二分查找---递归实现""" n = len(alist) if n > 0: mid = n//2 #数组长度的一半中间下标 if item == alist[mid] : return True #查找成功 elif item < alist[mid]: return binary_search(alist[:mid],item) else: return binary_search(alist[mid+1:], item) else : return False #失败if __name__ == "__main__": a = [1,5,6,10,11,13,18,37,99] # print(a) sorted_list_11 = binary_search(a,37) print(sorted_list_11)//True sorted_list_12= binary_search(a, 88) print(sorted_list_12)//False如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!
更多题目:
关注小猿公众号,每天学习一道题
转载地址:https://cxydev.blog.csdn.net/article/details/102480450 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年05月01日 11时36分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java中String类的方法及说明
2019-04-30
IntelliJ IDEA - 热部署插件JRebel 安装使用教程
2019-04-30
插件GsonFormat快速实现JavaBean
2019-04-30
Java面试题全集(上)
2019-04-30
Java面试题全集(中)
2019-04-30
Java面试题全集(下)
2019-04-30
《代码整洁之道》读书笔记
2019-04-30
Java程序员从笨鸟到菜鸟之(六十七)细谈Spring(一)spring简介
2019-04-30
Java程序员从笨鸟到菜鸟之(六十八)细谈Spring(二)自己动手模拟spring
2019-04-30
Java程序员从笨鸟到菜鸟全部博客目录
2019-04-30
java程序员从笨鸟到菜鸟之(七)一—java数据库操作
2019-04-30
Java程序员从笨鸟到菜鸟之(八)反射和代理机制
2019-04-30
面试心得与总结—BAT、网易、蘑菇街
2019-04-30
Java对象初始化顺序
2019-04-30
Java开发的几个注意点
2019-04-30
我的Java后端书架 (2016年暖冬4.0版)
2019-04-30
每个程序员都必读的10篇文章
2019-04-30
也谈IO模型
2019-04-30
谈谈互联网后端基础设施
2019-04-30