用c++实现二分递归查找,要求是用二分递归实现在n个有序的数据中查找数据k,并输出k是数据中第m个数,若数据中没有k则输出-1
时间: 2024-12-24 19:30:53 浏览: 3
C++ 中二分查找递归非递归实现并分析
5星 · 资源好评率100%
在C++中,我们可以使用二分查找算法来在一个有序数组中寻找特定元素。如果找到了,我们还需要确定它的索引以便满足题目要求。以下是使用递归方式实现的代码:
```cpp
#include <iostream>
int binarySearchRecursive(int arr[], int left, int right, int target, int m) {
if (left > right) { // 搜索范围为空,未找到目标
return -1;
}
int mid = left + (right - left) / 2; // 计算中间位置
if (arr[mid] == target) { // 找到目标值
if (mid - left + 1 == m) { // 如果它在第m个位置
return mid;
} else if (mid - left + 1 > m) { // 否则,继续向左半部分搜索第m个
return binarySearchRecursive(arr, left, mid - 1, target, m);
} else { // 向右半部分搜索前m个
return binarySearchRecursive(arr, mid + 1, right, target, m - (mid - left + 1));
}
} else if (arr[mid] < target) { // 目标值大于中间值,搜索右半部分
return binarySearchRecursive(arr, mid + 1, right, target, m);
} else { // 目标值小于中间值,搜索左半部分
return binarySearchRecursive(arr, left, mid - 1, target, m);
}
}
int main() {
int n, k, m;
std::cout << "请输入数组长度、目标值和第m个位置:";
std::cin >> n >> k >> m;
int* arr = new int[n]; // 假设输入已排序数组
for (int i = 0; i < n; i++) {
std::cin >> arr[i];
}
int result = binarySearchRecursive(arr, 0, n - 1, k, m);
delete[] arr; // 释放动态内存
if (result != -1) {
std::cout << "目标值 " << k << " 在数组中位于第 " << result + 1 << " 个位置。";
} else {
std::cout << "目标值 " << k << " 未在数组中找到。";
}
return 0;
}
```
阅读全文