用Python写二分查找算法
时间: 2023-09-20 19:06:00 浏览: 163
### 回答1:
二分查找算法是一种常见的查找算法,可以在有序的数组或列表中快速查找目标元素。以下是使用Python实现的二分查找算法:
```
def binary_search(arr, target):
"""
在有序数组arr中查找目标元素target,返回其索引位置,如果未找到,则返回-1。
"""
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
```
该函数接受两个参数,一个有序的数组和一个目标元素。在算法执行期间,首先定义左右指针,然后在数组中循环,每次找到数组的中间位置。如果中间元素是目标元素,则返回其索引。否则,如果中间元素小于目标元素,则说明目标元素在中间元素的右侧,因此将左指针设置为mid + 1。如果中间元素大于目标元素,则说明目标元素在中间元素的左侧,因此将右指针设置为mid - 1。如果最终未找到目标元素,则返回-1。
### 回答2:
二分查找算法是一种高效的搜索算法,它可以在有序数组中快速定位目标元素的位置。下面是用Python编写的二分查找算法:
```python
def binary_search(arr, target):
low, high = 0, 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
```
在这个算法中,我们首先初始化两个指针:`low`指向数组的第一个元素,`high`指向数组的最后一个元素。然后我们通过计算中间元素的索引来实现二分查找。
在每一轮循环中,我们首先判断中间元素是否等于目标元素。如果是,则返回中间元素的索引。如果不是,我们根据中间元素和目标元素的大小关系来调整 `low`和`high`的值。
如果中间元素小于目标元素,则说明目标元素可能在中间元素的右侧,我们将 `low`指向中间元素的下一个位置。如果中间元素大于目标元素,则说明目标元素可能在中间元素的左侧,我们将 `high`指向中间元素的上一个位置。
通过不断地二分查找,直到找到目标元素或者`low`大于`high`,即整个数组被遍历完毕时,如果没有找到目标元素,则返回-1。
以上就是使用Python编写的二分查找算法。这个算法的时间复杂度为O(log n),其中`n`是数组的大小。
### 回答3:
二分查找算法是一种高效的搜索算法,可以在有序数组中查找指定元素的位置。
以下是使用Python编写的二分查找算法的示例代码:
```
def binary_search(arr, target):
left, right = 0, 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
# 测试示例
array = [2, 4, 6, 8, 10, 12, 14]
target = 10
result = binary_search(array, target)
if result != -1:
print("元素在数组中的位置为:", result)
else:
print("元素不在数组中")
```
以上代码中,`binary_search`函数将有序数组`arr`和目标元素`target`作为输入参数。通过将搜索范围的左右边界不断逼近,直到找到目标元素或搜索范围为空时循环结束。
在每次循环中,计算中间位置`mid`,并与目标元素进行比较。如果`arr[mid]`等于目标元素`target`,则返回`mid`;如果`arr[mid]`小于`target`,则目标元素在中间位置的右侧,更新左边界`left`为`mid + 1`;如果`arr[mid]`大于`target`,则目标元素在中间位置的左侧,更新右边界`right`为`mid - 1`。
最后,如果循环结束时仍未找到目标元素,则返回-1表示目标元素不在数组中。
在示例代码中,数组`[2, 4, 6, 8, 10, 12, 14]`中查找目标元素`10`,返回的结果为`4`,表示目标元素在数组中的位置为索引`4`。
阅读全文