使用折半查找写一份代码
时间: 2024-02-20 16:58:50 浏览: 63
好的,下面是使用折半查找在 Python 中实现的代码:
```python
def binary_search(arr, target):
"""
在有序数组 arr 中查找目标元素 target,返回其索引位置,若不存在则返回 -1
"""
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 # 查找失败,返回 -1
```
这个函数接收一个有序数组 `arr` 和目标元素 `target` 作为输入,返回目标元素在数组中的索引位置,如果不存在则返回 -1。实现中使用了双指针法来维护查找区间,每次取中间位置进行比较,根据比较结果更新查找区间,直到找到目标元素或者确定目标元素不存在。
相关问题
在数组A中折半查找关键字key。若找到,啧返回key在表中的位置,否则为0,写一份代码
折半查找也称为二分查找算法,通常适用于有序数组。以下是使用Python语言编写的一个简单版本的二分查找函数,它会在给定的数组`A`中寻找关键字`key`:
```python
def binary_search(A, key):
low = 0
high = len(A) - 1
while low <= high:
mid = (low + high) // 2
# 如果中间元素等于目标键,直接返回其索引
if A[mid] == key:
return mid
# 如果中间元素大于目标键,搜索左半部分
elif A[mid] > key:
high = mid - 1
# 如果中间元素小于目标键,搜索右半部分
else:
low = mid + 1
# 如果没找到,返回0
return 0
# 使用示例
A = [1, 3, 5, 7, 9]
key = 5
position = binary_search(A, key)
if position != 0:
print(f"找到了,键{key}的位置是 {position}")
else:
print("没有找到")
写出可以使用其完整功能的折半查找代码
好的,以下是一份完整的折半查找代码,包括了输入、排序和输出:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int binarySearch(int a[], int n, int x) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == x) {
return mid;
} else if (a[mid] > x) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1; // 查找失败
}
int main() {
int n, x;
cout << "请输入数组长度n和要查找的数x:" << endl;
cin >> n >> x;
int a[n];
cout << "请输入" << n << "个数:" << endl;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n); // 排序
int index = binarySearch(a, n, x);
if (index == -1) {
cout << "查找失败" << endl;
} else {
cout << "要查找的数x在数组中的下标为:" << index << endl;
}
return 0;
}
```
运行示例:
```
请输入数组长度n和要查找的数x:
5 3
请输入5个数:
5 3 8 1 9
要查找的数x在数组中的下标为:1
```
希望能帮到你,如有疑问请随时问我!
阅读全文