帮我用python写一个折半查找程序
时间: 2023-09-13 14:10:45 浏览: 63
当然可以,下面是一个简单的折半查找程序的Python实现:
``` python
def binary_search(arr, x):
# 初始化左右边界
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
# 如果找到了元素,返回索引
if arr[mid] == x:
return mid
# 如果中间元素比要查找的元素大,则在左半边继续查找
elif arr[mid] > x:
right = mid - 1
# 如果中间元素比要查找的元素小,则在右半边继续查找
else:
left = mid + 1
# 如果未找到元素,返回-1
return -1
```
在上面的代码中,我们首先初始化左右边界为列表的第一个和最后一个元素的索引。然后,我们在while循环中执行折半查找,直到找到要查找的元素或者左右边界交叉。在每个迭代中,我们计算中间索引,并检查中间元素是否等于要查找的元素。如果中间元素比要查找的元素大,则在左半边继续查找;如果中间元素比要查找的元素小,则在右半边继续查找。最后,如果未找到元素,返回-1。
相关问题
折半查找程序
以下是一个简单的折半查找程序的示例,使用 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`。如果 `arr[mid]` 等于目标值,则该函数返回 `mid`。如果 `arr[mid]` 小于目标值,则更新 `low` 以排除左半部分。如果 `arr[mid]` 大于目标值,则更新 `high` 以排除右半部分。如果没有找到目标值,则返回 -1。
以下是一个示例用法:
```python
arr = [1, 3, 5, 7, 9]
target = 7
result = binary_search(arr, target)
if result != -1:
print("元素在索引 %d" % result)
else:
print("元素不在数组中")
```
输出:
```
元素在索引 3
```
注意,折半查找算法只适用于已排序的数组。如果数组未排序,则需要先对其进行排序,然后再执行折半查找。
写出一个程序代码(1)掌握折半查找算法的思想及程序实现。
好的,以下是一个使用折半查找算法的 Python 代码示例:
```python
def binary_search(arr, x):
"""
在有序数组 arr 中查找元素 x 的索引,如果不存在则返回 -1
"""
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] < x:
low = mid + 1
elif arr[mid] > x:
high = mid - 1
else:
return mid
return -1
```
该函数接收一个有序数组和要查找的元素作为参数,然后使用二分法在数组中查找该元素。如果找到了,返回该元素在数组中的索引;如果未找到,则返回 -1。