随机产生n(n>500)个整数,完成以下操作: (1)对给定的查找集合,顺序查找与给定值k相等的元素,并返回查找所用时间; (2)对给定的有序查找集合,折半查找与给定值k相等的元素,并返回查找所用时间; 部分参考代码如下: #include<ctime> //使用函数库ctime …… int main() { clock_t start,finish; //定义查找开始时间和结束时间变量 …… start=clock(); //记录查找算法的开始时间 查找算法 finish=clock(); //记录查找算法的结束时间 …… }
时间: 2024-02-13 18:06:04 浏览: 62
世界500强面试题.pdf
好的,我可以帮你完成这个任务。以下是代码示例:
```c++
#include <iostream>
#include <ctime>
using namespace std;
// 顺序查找
int sequential_search(int arr[], int n, int k) {
clock_t start, finish;
start = clock(); // 记录查找开始时间
for (int i = 0; i < n; i++) {
if (arr[i] == k) {
finish = clock(); // 记录查找结束时间
return (int)(finish - start); // 返回查找时间
}
}
finish = clock(); // 记录查找结束时间
return (int)(finish - start); // 返回查找时间
}
// 折半查找
int binary_search(int arr[], int n, int k) {
clock_t start, finish;
start = clock(); // 记录查找开始时间
int left = 0, right = n-1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == k) {
finish = clock(); // 记录查找结束时间
return (int)(finish - start); // 返回查找时间
} else if (arr[mid] > k) {
right = mid - 1;
} else {
left = mid + 1;
}
}
finish = clock(); // 记录查找结束时间
return (int)(finish - start); // 返回查找时间
}
int main() {
srand((unsigned int)time(NULL)); // 初始化随机数种子
const int n = 1000; // 生成1000个随机数
int arr[n];
for (int i = 0; i < n; i++) {
arr[i] = rand() % 2000 + 1; // 随机生成1~2000的整数
}
int k = arr[rand() % n]; // 随机生成一个要查找的整数
// 顺序查找
int sequential_time = sequential_search(arr, n, k);
cout << "顺序查找用时:" << sequential_time << "毫秒" << endl;
// 折半查找(需要先将数组排序)
sort(arr, arr+n);
int binary_time = binary_search(arr, n, k);
cout << "折半查找用时:" << binary_time << "毫秒" << endl;
return 0;
}
```
输出结果类似于:
```
顺序查找用时:0毫秒
折半查找用时:0毫秒
```
希望能帮助到你。
阅读全文