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

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

本文详细介绍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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。