Python中实现二分查找的2种方法?

公众号新增加了一个栏目,就是每天给大家解答一道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 False
if __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) //False

2、递归方式

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

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

10、说说Python可变与不可变数据类型?

11、说说Python模块主要分哪三类?

12、列举Python中的标准异常类?

13、Python中深拷贝与浅拷贝的区别?

14、Python中迭代器和生成器的区别?

15、Python可迭代对象怎么获取迭代器?

16、你了解什么是 Python 之禅么?

17、说说Python字典以及基本操作?

18、说说Python有几种字符串格式化?

19、说说Python多线程与多进程的区别?

20、说说HTTP常见响应状态码?

21、Python 单引号、双引号、三引号区别?

22、说说Python中猴子补丁是什么?

23、说说Python中的垃圾回收机制?

24、Python中有几种交换两个变量的值?

25、说说Python中的6种位运算符?

26、说说Python中的类型转换有哪些?

关注小猿公众号,每天学习一道题

(0)

相关推荐

  • 递归时间复杂度分析——master公式

    [牛客左神的算法课笔记] 若递归可以写成如下形式: T ( n ) = a T ( n b ) O ( n d ) T(n) = aT(\frac{n}{b}) O(n^d) T(n)=aT(bn​) ...

  • Python | 你好,二分法

    引言二分法指的是数学领域的概念,用二分法求函数f(x)零点近似值,这一思想也经常用于计算机中的查找过程中.尤其是当数据量很大适宜采用该方法.二分法查找的思路:(要求数组按升序排列)1.首先,从数组的中 ...

  • 快速排序

    快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要 ...

  • Python 列表的应用场景有哪些?你使用对了吗?

    我们在前几篇文章中依次介绍了列表的特性和用法.列表推导式.列表的底层实现.今天来聊一聊列表在实际开发中的应用场景. 在开发中,选用何种数据结构是由我们面对的数据特征和业务场景决定的. 数据是单个的还是 ...

  • Excel表格中数据比对和查找的几种技巧

    Excel表格中数据比对和查找的几种技巧 来源: Office 分类:Excel教程 阅读(920)评论(0) 经常被人问到怎么对两份Excel数据进行比对,提问的往往都很笼统:在工作中,有时候会需要 ...

  • UC头条:在Python中使用Lambda函数的5种用法

    引言 Lambda 函数(也称为匿名函数)是函数式编程中的核心概念之一. 支持多编程范例的 Python 也提供了一种简单的方法来定义 lambda 函数. 用 Python 编写 lambda 函数 ...

  • Word中输入特殊符号的3种方法,熟练掌握1种,工作就够用了

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 以前教程中分享过<Excel中如何输入特殊的字符?如勾.叉.平方.立方等 >,有粉丝问道在Word文档中如何输 ...

  • 中蜂介王台有几种方法?哪一种成功率高?养蜂人介王的经验

    加入我们一起学养蜂 养蜂技术是一门值得不断学习的技艺,每天一起无保留的学养蜂,交流养蜂!未关注的蜂友请先点击上方蓝字"追花精灵"再点关注,以免走失找不到 追花精灵 传递国内外蜂业前 ...

  • 国画中如何表现雨景,三种方法供你选择!

    近日全国各地都下起了大雨 不禁想问国画中是如何表现雨景的呢? 翻看一些资料后小编总结了三种方法 看看你喜欢哪一种表现方式? 一.直接表现下雨 雨景是不好画的,没有固定的形状也没有明显的色彩,不像雪可以 ...

  • 国画中如何表现雨景?三种方法供你选择

    国画中是如何表现雨景的呢? 以下三种方法 看看你喜欢哪一种表现方式 一.直接表现下雨 雨景是不好画的,没有固定的形状也没有明显的色彩,不像雪可以改变景物的面貌,比缥缈的云雾还难以表现,但是还是有能人表 ...

  • Excel中快速合并内容的几种方法,超级实用,方便高效

    在我们日常工作中,录入好的表格内容,有时需要把一些内容合并到一起,如果是重新打字录入,工作量是相当大啊.今天阿钟老师根据实例分享几种合并内容的方法. 01.多个单元格内容合并到一起(函数公式法) 公式 ...

  • 多条件查找的12种方法

    多条件查询可根据查询情形的不同,采取不同的函数组合进行查找,下面以两个条件的形式进行查询,同样地三个条件的也适用.. [例]根据下面的要求进行查询. 这个问题的情形比较地特殊,其查询的结果是数值,不是 ...

  • Excel中一对多查询的5种方法

    如下图所示,查询右侧员工编号为"45424"的所有的销售数量. 方法01 辅助列+VLOOKUP 对于查询类的问题,大家第一时间可能想到的会是VLOOKUP函数,是的小必老师给大家 ...