1.设计一个函数模板find,用于对一个有序数组采用二分法查找指定数据的元素下标。用int,char型数据进行测试。
时间: 2024-03-02 15:54:37 浏览: 142
好的,以下是设计的函数模板find:
```c++
template <typename T>
int find(T arr[], int n, T target) {
int l = 0, r = n - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return -1;
}
```
其中,arr为有序数组,n为数组的长度,target为要查找的目标元素。该函数的返回值为目标元素的下标,若不存在则返回-1。
接下来,我们用int和char型数据进行测试:
```c++
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int idx1 = find(arr, 9, 5);
int idx2 = find(arr, 9, 10);
cout << "idx1: " << idx1 << endl; // 输出:idx1: 4
cout << "idx2: " << idx2 << endl; // 输出:idx2: -1
char str[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
int idx3 = find(str, 7, 'c');
int idx4 = find(str, 7, 'h');
cout << "idx3: " << idx3 << endl; // 输出:idx3: 2
cout << "idx4: " << idx4 << endl; // 输出:idx4: -1
return 0;
}
```
可以看到,该函数模板可以成功地对int和char型数据进行二分查找。
阅读全文