用c++设计一个函数模板find,用于对一个有序数组采用二分法查找指定数据的元素下标,用int,char数据进行测试
时间: 2024-02-11 14:05:29 浏览: 158
二分查找(基于C++)
好的,下面是用 C++ 设计的函数模板 `find`:
```c++
#include <iostream>
template <typename T>
int find(T arr[], int size, T target) {
int left = 0;
int right = size - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
int main() {
int arr1[] = {1, 2, 3, 4, 5, 6};
int size1 = sizeof(arr1) / sizeof(int);
int target1 = 4;
std::cout << "The target " << target1 << " is at index " << find(arr1, size1, target1) << std::endl;
char arr2[] = {'a', 'b', 'c', 'd', 'e', 'f'};
int size2 = sizeof(arr2) / sizeof(char);
char target2 = 'd';
std::cout << "The target " << target2 << " is at index " << find(arr2, size2, target2) << std::endl;
return 0;
}
```
这个函数模板接受三个参数:一个有序数组 `arr`,数组大小 `size`,和要查找的目标值 `target`。它采用二分法对数组进行查找,如果找到了目标值,就返回该值在数组中的下标;否则,返回 -1。
在 `main` 函数中,我们分别用一个 `int` 数组和一个 `char` 数组测试了这个函数模板,输出了目标值在数组中的下标。
阅读全文