2写一个三分检索程序,首先检查n/3的元素是否等于某个x的值,然后检查2n/3处的元素,这样,或者找到或者把集合缩小到原来的1/3.找到输出元素下标,否则输出-1,用Python 实现
时间: 2024-02-27 18:59:07 浏览: 140
以下是一个使用 Python 实现的三分查找程序:
```python
def ternary_search(arr, left, right, x):
if left <= right:
mid1 = left + (right - left) // 3
mid2 = right - (right - left) // 3
if arr[mid1] == x:
return mid1
if arr[mid2] == x:
return mid2
if x < arr[mid1]:
return ternary_search(arr, left, mid1 - 1, x)
elif x > arr[mid2]:
return ternary_search(arr, mid2 + 1, right, x)
else:
return ternary_search(arr, mid1 + 1, mid2 - 1, x)
return -1
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = len(arr)
x = 4
index = ternary_search(arr, 0, n - 1, x)
if index != -1:
print("Element found at index", index)
else:
print("Element not found")
```
与 C++ 实现类似,Python 实现也使用了递归。首先定义左右指针 `left` 和 `right`,指向数组的两端。在每一次递归中,计算两个中间位置 `mid1` 和 `mid2`,然后分别检查这两个位置的元素是否等于 `x`。如果找到了,直接返回该位置;如果 `x` 小于 `arr[mid1]`,则在左半边继续查找;如果 `x` 大于 `arr[mid2]`,则在右半边继续查找;否则,在中间一段继续查找。如果最后还没有找到,返回 `-1`。
阅读全文