设计一个函数模板find,用于对一个有序数组采用二分法查找指定数据的元素下标。用int,char型数据进行测试。
时间: 2024-03-02 15:53:56 浏览: 69
采用二分查找法和顺序查找法查找元素的下标
好的,以下是函数模板find的实现:
```cpp
template<class T>
int find(T arr[], int n, const T& target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 没找到
}
```
函数模板find接受一个有序数组arr,数组长度n,以及要查找的目标元素target。函数使用二分法查找目标元素在数组中的下标,如果找到了就返回下标,否则返回-1表示没找到。
我们可以用以下代码测试函数模板:
```cpp
#include <iostream>
using namespace std;
template<class T>
int find(T arr[], int n, const T& target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 没找到
}
int main() {
int arr1[] = {1, 2, 3, 4, 5, 6};
char arr2[] = {'a', 'b', 'c', 'd', 'e'};
cout << find(arr1, 6, 3) << endl; // 应该输出 2
cout << find(arr2, 5, 'c') << endl; // 应该输出 2
return 0;
}
```
输出结果应该为:
```
2
2
```
阅读全文