写一个Python二分算法
时间: 2023-09-23 14:05:51 浏览: 126
### 回答1:
答案:
def binary_search(arr, target):
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
### 回答2:
二分算法(Binary Search)是一种在有序数组中查找特定元素的算法。其基本思想是通过将数组一分为二,并与目标值进行比较,逐渐缩小查找范围,直到找到目标值或确定不存在。
以下是一个简单的Python二分算法的实现:
```python
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1 # 表示目标值不存在
# 示例,假设有序数组为 [1, 2, 3, 4, 5, 6, 7, 8, 9],目标值为 5
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
target = 5
result = binary_search(arr, target)
if result != -1:
print("目标值在数组中的索引是", result)
else:
print("目标值不存在")
```
这个算法首先初始化查找范围的起始和结束索引(`low`和`high`),并在每次循环中计算出中间索引(`mid`),将数组分为左右两部分。然后,通过与目标值的比较,决定下一步查找的范围是左半部分还是右半部分。如果中间值等于目标值,表示找到了目标值,返回对应的索引。如果查找范围缩小到`low > high`,则表示目标值不存在,返回-1。
以上就是一个简单的Python二分算法的实现。二分算法的时间复杂度为O(log n),在大规模有序数组中查找目标值效率较高。
### 回答3:
二分算法,也称为二分查找算法,是一种常见的查找算法。
在Python中实现二分算法的步骤如下:
1. 定义一个函数,命名为binary_search,接收三个参数:一个有序列表,要查找的目标值,以及列表范围的起始和结束索引。
2. 在函数内部,首先检查起始索引是否小于等于结束索引。如果不满足,表示目标值不在列表中,返回-1。
3. 计算中间索引值mid,可以使用下面的公式:mid = (start + end) // 2
4. 检查中间索引对应的值是否等于目标值。如果等于,表示找到目标值,返回中间索引。
5. 如果中间索引对应的值大于目标值,表示目标值可能出现在左半部分的列表中,递归调用binary_search函数,并传入起始索引和中间索引减1作为结束索引。
6. 如果中间索引对应的值小于目标值,表示目标值可能出现在右半部分的列表中,递归调用binary_search函数,并传入中间索引加1作为起始索引,以及结束索引。
7. 如果目标值不在列表中,重复执行上述步骤,直到找到目标值或确定目标值不在列表中。
下面是用Python编写的二分算法的示例代码:
def binary_search(arr, target, start, end):
if start <= end:
mid = (start + end) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return binary_search(arr, target, start, mid - 1)
else:
return binary_search(arr, target, mid + 1, end)
else:
return -1
# 测试代码
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
target = 7
result = binary_search(arr, target, 0, len(arr) - 1)
print("目标值在列表中的索引为: ", result)
这段代码实现了一个二分查找算法,用来在有序列表arr中查找目标值target,并返回目标值在列表中的索引。如果找不到目标值,则返回-1。
在测试代码中,我们定义了一个有序列表arr和目标值target为7,并调用binary_search函数进行查找。最后打印出目标值在列表中的索引,输出结果为6。
阅读全文