请使用C++编程实现折半查找算法的查找应用。 说明:使 随机数面数按由小到大顺序产生n(由输入取得且n>0,例n=16)个数值放入数组,先显示此16个数个值再利用折半查找算法来查找输入数值,并显示其查找结果(其所在位置及比较次数)。若查无此数,则显示查无此数及比较次数
时间: 2024-12-22 07:18:11 浏览: 10
利用随机函数产生30000个随机整数,进行顺序查找、折半查找(静态)、以及二叉排序树查找(动态)(VisualC++)
折半查找算法(也称二分查找),是一种高效的查找数据结构中特定元素的搜索算法。以下是使用C++实现这个功能的一个基本步骤:
首先,我们需要包含必要的头文件并定义一个函数来进行查找操作:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 定义折半查找函数
int binarySearch(const std::vector<int>& arr, int target, int low, int high) {
if (low > high)
return -1; // 查找范围为空,未找到
int mid = low + (high - low) / 2;
// 比较目标值与中间值
if (arr[mid] == target)
return mid; // 找到了,返回索引
else if (arr[mid] < target)
return binarySearch(arr, target, mid + 1, high); // 如果目标大于中间值,在右半部分继续查找
else
return binarySearch(arr, target, low, mid - 1); // 否则,在左半部分继续查找
}
int main() {
int n;
std::cout << "请输入正整数n: ";
std::cin >> n;
std::vector<int> numbers(n);
for (int i = 0; i < n; ++i) {
std::cout << "请输入第" << (i+1) << "个数字: ";
std::cin >> numbers[i];
}
std::sort(numbers.begin(), numbers.end()); // 对数组进行排序
int search_num;
std::cout << "请输入要查找的数字: ";
std::cin >> search_num;
int result_index = binarySearch(numbers, search_num, 0, n - 1);
int comparison_count = (result_index != -1) ? log2((double)n) : 0;
if (result_index != -1) {
std::cout << "数字 " << search_num << " 的位置在第 " << (result_index + 1) << " 位,比较了 " << comparison_count << " 次。\n";
} else {
std::cout << "查无此数,进行了 " << comparison_count << " 次比较。\n";
}
return 0;
}
```
在这个程序中,我们首先获取用户输入的`n`和`search_num`,然后生成并排序数组。接着,我们在排序后的数组中使用折半查找函数寻找目标数,如果找到就返回其位置和比较次数,否则表示未找到。
阅读全文