1.有A和B两个数组,A数组中存储500个2000以内的随机整数,B数组中存储10个2000以内的随机整数,完成以下操作: (1)用顺序查找算法显示B数组中每个元素在A数组中的位置,并返回该算法所用时间; (2)用折半查找算法显示B数组中每个元素在A数组中的位置,并返回该算法所用时间; 本程序需要使用以下函数: QueryPerformanceFrequency():返回硬件支持的高精度计数器的频率(次每秒) QueryPerformanceCounter():返回高精度计时器的值 在使用时,先使用QueryPerformanceFrequency()得到计数器的频率,再计算两次调用所得的计时器值之差,用差去除以频率就得到精确的计时。 部分参考代码如下: #include <windows.h> …… int main() { LARGE_INTEGER freq, start, end; QueryPerformanceFrequency(&freq); //获取CPU的时钟频率(HZ) QueryPerformanceCounter(&start); //获取开始时钟计数 调用对应查找算法 QueryPerformanceCounter(&end); //获取结束时钟计数 double us = (end.QuadPart - start.QuadPart)*1000000.0 / freq.QuadPart; cout << "执行时间:" << us << " 微秒" << endl; //输入算法运行时间 …… }
时间: 2024-03-25 16:40:16 浏览: 75
好的,我会尽力回答你的问题。针对你的第一个问题,以下是代码实现:
```c++
#include <iostream>
#include <windows.h>
using namespace std;
const int N = 500;
const int M = 10;
// 顺序查找算法
int seqSearch(int a[], int n, int key) {
for (int i = 0; i < n; i++) {
if (a[i] == key) {
return i;
}
}
return -1;
}
// 折半查找算法
int binarySearch(int a[], int n, int key) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == key) {
return mid;
} else if (a[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
LARGE_INTEGER freq, start, end;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
int A[N], B[M];
// 初始化A数组和B数组
for (int i = 0; i < N; i++) {
A[i] = rand() % 2000 + 1;
}
for (int i = 0; i < M; i++) {
B[i] = rand() % 2000 + 1;
}
// 顺序查找
for (int i = 0; i < M; i++) {
int pos = seqSearch(A, N, B[i]);
cout << "B[" << i << "] 在 A 数组中的位置为:" << pos << endl;
}
// 折半查找
sort(A, A + N); // 把A数组排序
for (int i = 0; i < M; i++) {
int pos = binarySearch(A, N, B[i]);
cout << "B[" << i << "] 在 A 数组中的位置为:" << pos << endl;
}
QueryPerformanceCounter(&end);
double us = (end.QuadPart - start.QuadPart) * 1000000.0 / freq.QuadPart;
cout << "执行时间:" << us << " 微秒" << endl;
return 0;
}
```
代码中使用了 `LARGE_INTEGER` 类型的变量来记录计时器的值,分别在顺序查找和折半查找算法中调用了 `seqSearch()` 和 `binarySearch()` 函数进行查找,并输出每个元素在 A 数组中的位置。最后使用 `QueryPerformanceCounter()` 函数获取结束时钟计数,计算出算法执行的时间。
值得注意的是,为了方便起见,这里的代码没有进行错误处理,当然,在实际应用中,我们需要对输入进行判断,确保输入的数据满足要求。
阅读全文