c++实现查找功能,要求如下1.给定无序序列1,3,4,334, 67,8, 13,25, 3923,10,41," 5,66,52,21,64,76,658, 789,546,23,56,90,109143, 17 8, 967, 11,19); 2.查找与输入的给定关键字相同的元素,使用指定的算法进行查找,若存 在则输出找到的元素在序列中的位序(第一个数位序记为1)和需要进行的 比较次数,不存在则输出"No",序列位序从1到n。 3.实现顺序查找和折半查找算法。
时间: 2023-08-22 17:05:54 浏览: 119
以下是C++实现顺序查找和折半查找算法的代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 顺序查找算法
pair<int, int> sequential_search(vector<int> &lst, int key) {
int count = 0; // 记录比较次数
for (int i = 0; i < lst.size(); ++i) {
++count;
if (lst[i] == key) {
return make_pair(i+1, count);
}
}
return make_pair(-1, count);
}
// 折半查找算法
pair<int, int> binary_search(vector<int> &lst, int key) {
int count = 0; // 记录比较次数
int low = 0, high = lst.size()-1;
while (low <= high) {
++count;
int mid = (low + high) / 2;
if (lst[mid] == key) {
return make_pair(mid+1, count);
} else if (lst[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return make_pair(-1, count);
}
int main() {
// 给定无序序列
vector<int> lst = {1, 3, 4, 334, 67, 8, 13, 25, 3923, 10, 41, 5, 66, 52, 21, 64, 76, 658, 789, 546, 23, 56, 90, 109143, 178, 967, 11, 19};
int key;
cout << "请输入需要查找的关键字:";
cin >> key;
// 顺序查找
auto res1 = sequential_search(lst, key);
if (res1.first == -1) {
cout << "No" << endl;
} else {
cout << "顺序查找结果:位序为" << res1.first << ", 比较次数为" << res1.second << endl;
}
// 折半查找
sort(lst.begin(), lst.end()); // 折半查找前需要先排序
auto res2 = binary_search(lst, key);
if (res2.first == -1) {
cout << "No" << endl;
} else {
cout << "折半查找结果:位序为" << res2.first << ", 比较次数为" << res2.second << endl;
}
return 0;
}
```
其中,`lst`为给定无序序列,`key`为需要查找的关键字。`sequential_search`函数实现顺序查找算法,`binary_search`函数实现折半查找算法。函数会返回找到的元素在序列中的位序和比较次数,若未找到则返回"-1"表示找不到。在主函数中,先输入需要查找的关键字,然后分别调用顺序查找和折半查找函数进行查找,并输出结果。
阅读全文