`

查找算法学习之二分查找(Python版本)——BinarySearch

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


  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)


示例:

#!/usr/bin/env python
#-*-coding:utf-8-*-

def binary_search(l,key,lo=0,hi=None):
    if not hi:
        hi = len(l)
    while lo<hi:
        mid = (lo+hi)//2
        if l[mid]>key:
            hi = mid-1
        elif l[mid]<key:
            lo = mid+1
        else:
            return mid
    return -1

def main():
    L = [1,2,3,4,5,6]
    print binary_search(L,6)

if __name__=="__main__":
    main()

参考资料:
http://zh.wikipedia.org/wiki/%E6%8A%98%E5%8D%8A%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95
分享到:
评论
1 楼 2057 2014-09-02  
这个程序有bug。

相关推荐

    算法设计-实验二-查找.docx

    查找算法通常分为线性查找、二分查找和哈希查找等不同类型,每种方法都有其适用的场景和优缺点。 以实验中的例子为例,我们有一个数列:16、25、39、27、12、8、45、63,目标是在这个数列中找到数字12。线性查找是...

    二分查找图解方法--算法的基本之一

    ### 二分查找图解方法——算法的基本之一 #### 知识点概述 二分查找是一种在有序数组中查找特定元素的高效算法。其基本思想是通过将目标值与数组中间元素进行比较来缩小搜索范围,从而达到快速查找的目的。在最坏...

    学学Python_34函数_创建函数04 二分法查找

    在Python中实现二分查找,可以编写如下的函数模板: ```python def binary_search(arr, target): left, right = 0, len(arr) - 1 while left mid = (left + right) // 2 if arr[mid] == target: return mid ...

    python有序查找算法 二分法实例解析

    对于有序数组或列表的查找操作,有一种高效的算法——**二分查找**(也称作折半查找)。本文将详细介绍Python中实现二分查找的方法,并通过具体的代码示例来帮助读者理解这一算法的工作原理及其应用场景。 #### 二...

    python基础算法.docx

    本文详细介绍了四种常见的Python基础算法——冒泡排序、二分查找、斐波那契数列以及归并排序,并提供了相应的Python实现代码。这些算法不仅对于初学者来说是很好的学习材料,同时也为高级开发人员提供了快速参考。...

    PyPI 官网下载 | micropython-bisect-0.5.tar.gz

    这个库的核心功能是对列表进行二分查找(binary search),这是一种高效的搜索算法,特别适合在已排序的序列中寻找特定元素。 二分查找算法的原理是将目标值与序列中间元素进行比较,根据比较结果缩小搜索范围,再...

    Data Structure and Algorithmic Thinking with Python

    - **搜索算法**:包括顺序搜索(Sequential Search)、二分搜索(Binary Search)等。 - **图算法**:如广度优先搜索(Breadth-First Search, BFS)、深度优先搜索(Depth-First Search, DFS)、最短路径算法(Dijkstra's ...

    Algorithm_matlab_

    - `binary_search.py` 和 `linear_search.py` 文件分别可能包含了二分查找和线性查找算法的实现。二分查找适用于已排序的数组,其时间复杂度为 O(log n),而线性查找则适用于任意顺序的列表,时间复杂度为 O(n)。在...

    Advanced-Division-源码.rar

    3. **二分查找**(Binary Search):二分查找适用于有序数组,通过不断将查找区间减半来快速定位目标值,具有较高的查找效率。 4. **大整数乘法**(Large Integer Multiplication):如Karatsuba算法,通过分治策略...

    蓝桥杯的一些题目解析代码

    - **应用场景**:二分查找是一种高效的查找方法,尤其适用于大型有序数组。 - **示例代码**: ```python def binary_search(arr, target): left, right = 0, len(arr) - 1 while left mid = (left + right) //...

    DS算法实践

    3. 排序与搜索:快速排序、归并排序、二分查找等的实现。 4. 动态规划问题:0/1背包问题、最长递增子序列、斐波那契数列等。 5. 栈和队列的应用:括号匹配、先进先出(FIFO)操作、拓扑排序等。 通过这些实践代码...

    leetcode和oj-notes-leetcode:LeetCodeOJ的解决方案

    在LeetCode上,无论是动态规划、贪心算法,还是二分查找、回溯法,都可以用这两种语言灵活实现。 在实际解题过程中,理解题意是关键的第一步。通过对题目描述的深入分析,明确问题的核心需求,然后选择合适的算法或...

    leetcode答案-leetcode:leetcode习题答案

    再如"Binary Search"(二分查找),它是一种高效的搜索算法,适合在有序数据中查找特定元素。 此外,设计模式也是LeetCode习题中不容忽视的部分。如"Design Twitter"(设计推特),需要理解并应用到队列、栈以及...

    Codes

    2. 算法应用:排序算法(如冒泡排序、快速排序、归并排序)、搜索算法(如二分查找、深度优先搜索、广度优先搜索)以及动态规划、贪心算法等在LeetCode上都有丰富的实践。比如,"Merge Intervals"问题,需要将时间...

Global site tag (gtag.js) - Google Analytics