用python写一段二分查找的代码
时间: 2023-08-31 08:31:12 浏览: 113
### 回答1:
def binary_search(list, target):
low = 0
high = len(list) - 1 while low <= high:
mid = (low + high) // 2
if list[mid] == target:
return mid
elif list[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1print(binary_search([1, 2, 3, 4, 5], 4)) # 3
### 回答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:
high = mid - 1
# 如果中间值小于目标值,则在右半部分查找
else:
low = mid + 1
# 如果找不到目标值,则返回-1
return -1
# 测试代码
nums = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
target = 16
result = binary_search(nums, target)
if result != -1:
print("目标值所在的索引为:", result)
else:
print("未找到目标值")
```
以上代码首先定义了一个`binary_search`函数,接受一个有序数组`arr`和目标值`target`作为参数。函数通过维护一个左边界`low`和右边界`high`,在每次循环中计算中间索引`mid`。然后根据中间值与目标值的大小关系,更新`low`和`high`的值,最终返回目标值在数组中对应的索引,如果找不到则返回-1。
然后,在测试代码中定义了一个有序数组`nums`和目标值`target`,调用`binary_search`函数进行查找,并打印结果。如果找到目标值,则输出目标值所在的索引;如果未找到,则输出未找到的提示信息。
通过以上代码,可以实现二分查找算法,并在有序数组中查找目标值。
### 回答3:
二分查找是一种在有序数组中查找指定元素的算法。它先确定数组的中间元素,然后将指定元素与中间元素进行比较,如果相等则返回中间元素的索引,如果较小则在数组的前半部分继续查找,如果较大则在数组的后半部分继续查找,直到找到指定元素或者数组被查找完毕。
以下是使用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
```
在上述代码中,`arr`是待查找的有序数组,`target`是要查找的目标元素。函数`binary_search`实现了二分查找算法,并返回目标元素在数组中的索引,如果目标元素不存在则返回-1。
算法通过不断更新`low`和`high`的值来缩小查找范围,直到找到目标元素或者查找范围为空。
在每一次循环中,首先计算出中间元素的索引`mid`,然后根据`arr[mid]`与`target`的比较结果来更新`low`和`high`的值。如果`arr[mid]`等于`target`,则返回`mid`作为查找结果;如果`arr[mid]`小于`target`,则在数组的后半部分继续查找,即将`low`更新为`mid + 1`;如果`arr[mid]`大于`target`,则在数组的前半部分继续查找,即将`high`更新为`mid - 1`。
如果循环结束时仍未找到目标元素,则返回-1。
这段代码实现了二分查找算法,可以方便地在有序数组中查找指定元素。
阅读全文