《Python 每日一学》之二分法查找

二分法查找

适用场景:

  1. 查找对象必须为有序集合,不然前置的排序工作影响较大
  2. 集合内的对象必须可任意访问,比如:链表就不适使用此方法
  3. 时间复杂度:O(log2n),n 表示元素个数
  4. 空间复杂度:S(n),n 表示元素个数

数学知识复习:

  1. log2n: log 以 2 为底 n 的对数
  2. 对数:如果 2 的 x 次方等于 n ,那么 x 就等于 log2n 的对数

代码实现:

def binary_search(needle, haystack):
    min, max = 0, len(haystack) - 1

    while min <= max:
        midpoint = (min + max) // 2    # 向下取整数
        guess = haystack[midpoint]
        if guess == needle:
            return midpoint
        elif guess > needle:
            max = midpoint - 1
        else:
            min = midpoint + 1
    
    return None

  • 交流可以加 QQ 群:397234385
  • 或者 QQ 扫码入群:

《Python 每日一学》之二分法查找