用c++编程有十五个数按从大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出无此数
时间: 2024-11-27 22:11:57 浏览: 1
在C++中,我们可以创建一个函数来实现折半查找算法。假设我们有一个名为`half_search`的函数,接收一个已排序的整数数组`arr`、数组的长度`size`以及用户输入的目标数值`target`。以下是实现步骤:
```cpp
#include <iostream>
#include <vector>
int half_search(const std::vector<int>& arr, int target, int low, int high) {
if (low > high) {
// 如果目标值不在数组范围内,返回 -1 表示不存在
return -1;
}
int mid = low + (high - low) / 2;
// 检查中间元素是否等于目标值
if (arr[mid] == target) {
return mid;
}
// 如果目标值大于中间元素,搜索右半部分
else if (arr[mid] < target) {
return half_search(arr, target, mid + 1, high);
}
// 否则搜索左半部分
else {
return half_search(arr, target, low, mid - 1);
}
}
int main() {
std::vector<int> arr({15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85});
int size = arr.size();
int target;
std::cout << "请输入一个数字(15-85之间): ";
std::cin >> target;
int position = half_search(arr, target, 0, size - 1);
if (position != -1) {
std::cout << "该数在数组中的位置是:" << position + 1 << std::endl; // 由于数组索引从0开始,所以我们加1
} else {
std::cout << "无此数" << std::endl;
}
return 0;
}
```
阅读全文