用c++编写一个完整程序:.设计一个函数模板find,用于对一个有序数组采用二分法查找指定数据的元素下标。用int,char型数据进行测试。
时间: 2024-02-11 09:08:01 浏览: 28
好的,以下是实现您要求的C++程序:
```c++
#include <iostream>
using namespace std;
template <typename T>
int find(T arr[], int len, T key) { // 定义函数模板find
int left = 0, right = len - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == key) { // 找到了目标元素
return mid;
}
else if (arr[mid] > key) { // 目标元素在左侧
right = mid - 1;
}
else { // 目标元素在右侧
left = mid + 1;
}
}
return -1; // 没有找到目标元素
}
int main() {
int arr1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
char arr2[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
int len1 = sizeof(arr1) / sizeof(arr1[0]);
int len2 = sizeof(arr2) / sizeof(arr2[0]);
int key1 = 5;
char key2 = 'f';
int pos1 = find(arr1, len1, key1);
int pos2 = find(arr2, len2, key2);
if (pos1 != -1) {
cout << "The index of " << key1 << " in arr1 is " << pos1 << endl;
}
else {
cout << "Cannot find " << key1 << " in arr1" << endl;
}
if (pos2 != -1) {
cout << "The index of " << key2 << " in arr2 is " << pos2 << endl;
}
else {
cout << "Cannot find " << key2 << " in arr2" << endl;
}
return 0;
}
```
程序中首先定义了一个函数模板find,它有三个参数:一个T类型的数组arr、数组长度len和一个T类型的目标元素key。该函数使用二分法查找目标元素在数组中的下标,找到则返回下标,未找到则返回-1。
在主函数中,我们定义了两个数组arr1和arr2,分别是int类型和char类型的。然后我们计算出它们的长度len1和len2,并定义了两个目标元素key1和key2。接下来我们调用find函数,分别在arr1和arr2中查找key1和key2的位置,并将结果赋值给pos1和pos2。最后根据pos1和pos2是否为-1,输出查找结果。