用C++写代码:用模板类对给定的查找集合顺序查找与给定值k相等的元素。 对给定的查找集合折半查找与给定值k相等的元素。
时间: 2023-11-27 15:49:21 浏览: 76
C++之模板编程
5星 · 资源好评率100%
下面是用模板类实现顺序查找与折半查找的代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
class Search {
public:
static int seqSearch(vector<T>& arr, T key) {
for (int i = 0; i < arr.size(); i++) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
static int binarySearch(vector<T>& arr, T key) {
int left = 0, right = arr.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
};
int main() {
vector<int> arr = {1, 3, 5, 7, 9};
int key = 5;
int index1 = Search<int>::seqSearch(arr, key);
int index2 = Search<int>::binarySearch(arr, key);
cout << "Sequential Search: " << index1 << endl;
cout << "Binary Search: " << index2 << endl;
return 0;
}
```
在上面的代码中,我们首先定义了一个模板类 `Search`,其中包含两个静态函数 `seqSearch` 和 `binarySearch`,分别实现了顺序查找和折半查找。
在 `seqSearch` 函数中,我们使用一个循环来遍历整个数组,如果找到了目标元素,则返回其下标,否则返回 -1。
在 `binarySearch` 函数中,我们使用一个循环来不断缩小查找区间,直到找到目标元素或者查找区间为空。在每一次循环中,我们计算出中间位置 mid,如果中间位置的元素等于目标元素,则返回其下标;否则,如果中间位置的元素小于目标元素,则将查找区间左端点移到 mid + 1,否则将查找区间右端点移到 mid - 1。
最后,在 main 函数中,我们定义了一个整型数组和一个目标值,然后分别调用 `seqSearch` 和 `binarySearch` 函数来查找目标元素,输出它们的下标。
阅读全文