折半查算法,也称二分查算法,是一种高效的查算法,适用于已排序的数组或列表。其思想是将待查区间的中间位置与目标值比较,根据比较结果缩小查区间,直到到目标值或者查区间为空。 下面分别介绍实现折半查算法的非递归和递归算法。
1. 非递归算法:
非递归算法的基本思想是通过循环不断缩小查区间,直到到目标值或者查区间为空。具体步骤如下:
1.1 初始化:定义查区间的左右边界,即最小值和最大值,左右边界初始值分别为0和n-1,其中n为数组或列表的长度。
1.2 循环查:不断缩小查区间,直到到目标值或者查区间为空。具体步骤如下:
1) 计算查区间的中间位置mid:mid = (left + right) / 2。
2) 如果目标值等于中间位置的值,则返回mid。
3) 如果目标值小于中间位置的值,则在左半部分继续查,将查区间的右边界更新为mid-1。
沈阳市实验学校
4) 如果目标值大于中间位置的值,则在右半部分继续查,将查区间的左边界更新为mid+1。
5) 循环直到到目标值或者查区间为空。
1.3 返回结果:如果到目标值则返回其下标,否则返回-1。
以下是非递归算法的Python实现代码:
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
mpeg return mid
elif arr[mid] < target:
天津铁通
什邡市实验小学肌肉松弛剂 left = mid + 1
else:
right = mid - 1
return -1
2. 递归算法:
递归算法的基本思想是将待查区间分为左右两个子区间,分别递归查,直到到目标值或者查区间为空。具体步骤如下:
2.1 递归终止条件:如果查区间为空,则返回-1。
冀教版小学英语教案
2.2 计算查区间的中间位置mid:mid = (left + right) // 2。
2.3 如果目标值等于中间位置的值,则返回mid。
2.4 如果目标值小于中间位置的值,则递归在左半部分查,将查区间的右边界更新为mid-1。
2.5 如果目标值大于中间位置的值,则递归在右半部分查,将查区间的左边界更新为mid+1。