用python写二分查找
时间: 2023-10-01 15:10:26 浏览: 61
以下是用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
```
该函数接收一个有序数组和要查找的目标值。它使用两个指针 `low` 和 `high` 来确定数组的子范围,并在每次迭代中将它们更新以逐渐缩小搜索范围。在每次迭代中,该函数将中间指针 `mid` 设置为数组的中间位置,并将目标值与该位置的值进行比较。如果它们相等,则返回该位置。如果目标小于中间值,则缩小搜索范围到数组的左半边。如果目标大于中间值,则缩小搜索范围到数组的右半边。如果未找到目标,则返回 -1。
相关问题
用Python写二分查找算法
### 回答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`。
使用python语言写二分查找
当然可以!下面是使用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 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
target = 5
result = binary_search(arr, target)
if result != -1:
print("元素在索引 %d 处找到" % result)
else:
print("元素未找到")
```
这是一个基本的二分查找算法,它接受一个排序好的数组和目标元素作为输入,并返回目标元素在数组中的索引位置。如果目标元素不存在于数组中,则返回-1。
在上述示例中,我们定义了一个名为`binary_search`的函数,它使用了一个`while`循环来不断缩小搜索范围,直到找到目标元素或搜索范围为空。通过比较中间元素与目标元素的大小,我们将搜索范围缩小到左侧或右侧的一半,并重复此过程。
在示例调用中,我们创建了一个排序好的数组`arr`和一个目标元素`target`,然后调用`binary_search`函数来查找目标元素在数组中的索引位置,并根据返回结果进行相应的输出。
希望这能帮到你!如有任何疑问,请随时提问。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)