Python二分查找法:原理、非递归与递归实现详解

Hazel
Hazel
发布时间:2026-10-14 | 5人浏览过
原创

本文详细介绍Python中二分查找法的实现原理,包括非递归与递归两种编码方式。文章指出二分查找适用于有序且无重复元素的顺序存储结构,时间复杂度为O(log2n),并通过具体代码演示了算法逻辑。

二分查找概述

在有序数据集中查找特定元素时,二分查找是一种高效且常用的算法,能显著缩短搜索时间。尽管其逻辑看似简单,但要写出完全正确的实现却颇具挑战。下文将简要介绍二分查找的核心概念,并通过代码演示其具体用法。

1、二分查找定义

该算法主要应用于元素已排序且不含重复值的列表中,用于定位特定元素的位置。

二分查找的特点

2、核心特点

(1)数据源必须是有序列表;

(2)列表中不能包含重复元素;

(3)通过数组下标索引进行定位查找。

Python代码实现

3、代码实现方式

非递归实现方案:


def binary_search(alist, item):
  """二分查找 非递归方式"""
  n = len(alist)
  start = 0
  end = n - 1
  while start <= end:
    mid = (start + end) // 2
    if alist[mid] == item:
      return True
    elif item < alist[mid]:
      end = mid - 1
    else:
      start = mid + 1
  return False

if __name__ == '__main__':
  li = [17, 20, 26, 31, 44, 54, 55, 77, 93]
  # print(binary_search(li, 55))
  # print(binary_search(li, 100))

递归实现方案:


def binary_search_2(alist, item):
  """二分查找 递归方式"""
  n = len(alist)
  if 0 == n:
    return False
  mid = n // 2
  if alist[mid] == item:
    return True
  elif item < alist[mid]:
    return binary_search_2(alist[:mid], item)
  else:
    return binary_search_2(alist[mid + 1:], item)
if __name__ == '__main__':
  li = [17, 20, 26, 31, 44, 54, 55, 77, 93]
  # print(binary_search(li, 55))
  # print(binary_search(li, 100))

原理与复杂度分析

基础知识点扩展:

概念介绍

二分查找,又称折半查找(Binary Search),是一种效率较高的查找算法。其前提条件是线性表必须采用顺序存储结构,且表中的元素必须按关键字有序排列。

使用前提

待查找的序列必须是有序的。

时间复杂度

O(log2n)

算法原理

1)确定当前查找区间的中间位置K;

2)将目标值t与中间元素array[k]进行比较:若相等,则查找成功并返回该位置;否则,根据比较结果确定新的查找区域,继续执行二分查找。

3)新区间的确定过程如下:

若array[k]>t,鉴于数组有序性,可知array[k,k+1,……,high]区间内的所有元素均大于t;因此,新的查找区间缩小为array[low, ..., K-1];

反之,若array[k]<t,则对应的查找区间调整为array[k+1, ..., high]。

至此,关于Python中二分查找法的实现方法介绍完毕。如需了解更多相关技术内容,欢迎查阅本站往期文章或继续关注后续更新,感谢您的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表