Python二分查找法:原理、非递归与递归实现详解
本文详细介绍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中二分查找法的实现方法介绍完毕。如需了解更多相关技术内容,欢迎查阅本站往期文章或继续关注后续更新,感谢您的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













