c++设计一个函数模板find,用于对一个有序数组采用二分法查找指定数据的元素下标。用int,char型数据进行测试。
时间: 2024-03-26 17:38:34 浏览: 51
可以参考以下代码实现:
```c++
#include <iostream>
using namespace std;
template <typename T>
int find(T arr[], int left, int right, T target)
{
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, 7, 8, 9};
int idx1 = find(arr1, 0, 8, 5);
cout << "The index of 5 in arr1 is: " << idx1 << endl;
char arr2[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
int idx2 = find(arr2, 0, 6, 'd');
cout << "The index of 'd' in arr2 is: " << idx2 << endl;
return 0;
}
```
在模板函数find中,参数T表示数组中元素的类型,通过left和right指针实现二分查找,最后返回目标元素的下标,如果未找到则返回-1。在main函数中,我们分别使用int和char类型的数组进行测试,输出目标元素在数组中的位置。
阅读全文