#include <iostream>#include <random>#include <vector>int main() { int n = 1000; // 产生1000个随机整数 int k = 123; // 待查找的目标值 std::vector<int> data(n); // 存储随机整数的容器 // 使用随机数生成器生成n个随机整数 std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(1, 1000); for (int i = 0; i < n; ++i) { data[i] = dis(gen); } // 顺序查找 clock_t start, finish; start = clock(); for (int i = 0; i < n; ++i) { if (data[i] == k) { break; } } finish = clock(); std::cout << "顺序查找所用时间:" << (double)(finish - start) / CLOCKS_PER_SEC << "s" << std::endl; // 折半查找 std::sort(data.begin(), data.end()); // 对数据进行排序 start = clock(); int left = 0, right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (data[mid] == k) { break; } else if (data[mid] < k) { left = mid + 1; } else { right = mid - 1; } } finish = clock(); std::cout << "折半查找所用时间:" << (double)(finish - start) / CLOCKS_PER_SEC << "s" << std::endl; return 0;}为什么返回时间都是0
时间: 2024-01-24 15:03:36 浏览: 72
这段代码的问题在于使用 clock() 函数来计时时,返回的时间单位是时钟周期(clock ticks),而不是秒。因此,当计时非常短的时候,可能会返回0。这就是为什么你的代码返回时间都是0的原因。
解决这个问题的方法是使用更精确的计时方法,例如使用 std::chrono 库中的 high_resolution_clock。具体做法是:
1. 在代码开头添加头文件 #include <chrono>
2. 将 clock_t 类型的变量 start 和 finish 改为 std::chrono::time_point<std::chrono::high_resolution_clock> 类型。
3. 在需要计时的地方使用高精度计时方法,例如 start = std::chrono::high_resolution_clock::now();
4. 计算时间差时,使用 std::chrono::duration_cast<std::chrono::duration<double>> 类型将时间差转换为秒。
5. 输出时间时,使用 std::chrono::duration<double> 类型的 count() 函数。
下面是修改后的代码示例:
```
#include <iostream>
#include <random>
#include <vector>
#include <chrono>
int main() {
int n = 1000; // 产生1000个随机整数
int k = 123; // 待查找的目标值
std::vector<int> data(n); // 存储随机整数的容器
// 使用随机数生成器生成n个随机整数
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 1000);
for (int i = 0; i < n; ++i) {
data[i] = dis(gen);
}
// 顺序查找
std::chrono::time_point<std::chrono::high_resolution_clock> start, finish;
start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < n; ++i) {
if (data[i] == k) {
break;
}
}
finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = finish - start;
std::cout << "顺序查找所用时间:" << elapsed.count() << "s" << std::endl;
// 折半查找
std::sort(data.begin(), data.end()); // 对数据进行排序
start = std::chrono::high_resolution_clock::now();
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (data[mid] == k) {
break;
} else if (data[mid] < k) {
left = mid + 1;
} else {
right = mid - 1;
}
}
finish = std::chrono::high_resolution_clock::now();
elapsed = finish - start;
std::cout << "折半查找所用时间:" << elapsed.count() << "s" << std::endl;
return 0;
}
```
这样修改后,你应该可以正确地得到计时结果了。
阅读全文