• Python二分查找详解


    计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval search algorithm)、对数搜索算法(英语:logarithmic search algorithm),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

    二分查找算法在最坏情况下是对数时间复杂度的,需要进行 O ( l o g n ) O(log^n)O(log
    n
    ) 次比较操作,n nn在此处是数组的元素数量。二分查找算法使用常数空间,对于任何大小的输入数据,算法使用的空间都是一样的。除非输入数据数量很少,否则二分查找算法比线性搜索更快,但数组必须事先被排序。尽管一些特定的、为了快速搜索而设计的数据结构更有效(比如哈希表),二分查找算法应用面更广。

    二分查找原理:二分查找只对有序数组有效。二分查找每次比较数组剩余元素的中间元素与目标值。如果目标值与中间元素相等,则返回其在数组中的位置;如果目标值小于中间元素,则搜索继续在前半部分的数组中进行。如果目标值大于中间元素,则搜索继续在数组上部分进行。由此,算法每次排除掉至少一半的待查数组。

    def binary_search(arr, left, right, hkey):
        ci=0
        while left <= right:
            ci+=1
            mid = left + (right - left) // 2
            if arr[mid] == hkey:
                 #return mid
                break
            elif arr[mid] < hkey:
                left = mid + 1
            elif arr[mid] > hkey:
                right = mid - 1
        return '次数:%s,下标:%s'% (ci,mid)
    print(binary_search([3,8,11,15,17,19,25,30,44],0,8,8))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    例题:
    1、对于数列[3,8,11,15,17,19,25,30,44],采用二分法查找8,需要找几次?
    过程:
    3,8,11,15,17,19,25,30,44
    3,8,11,15
    8
    使用上面的函数
    运行结果:
    在这里插入图片描述
    所以答案:2次

    2、用二分查找在[1,999]查找某个数值最多需要多少次?
    答案:10次
    当没有具体查找元素时,可以通过“除2”的方式来查找

    用元素个数n循环除2,当n<=1时,统计循环次数,即查找次数

    如果你感觉有收获,欢迎给我打赏 ———— 以激励我输出更多优质内容
    在这里插入图片描述

  • 相关阅读:
    28.CSS 渐变圆文本动画
    大学生HTML作业篮球网页 HTML作业篮球网页期末作业 HTML+CSS篮球网页 HTML学生作业体育篮球网页
    [学习笔记]使用Docker+Jenkin自动化流水线发布.Net应用
    Git分支管理
    什么是GPT,初学者怎么使用并掌握Chat GPT工具
    元素转换(四种)
    Java:Perl和Java的详细比较
    Milvus踩坑笔记
    SQL语言
    c++day8
  • 原文地址:https://blog.csdn.net/weixin_40762926/article/details/132764171