使用c++编写一个完整程序,利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序,基数排序等排序方法进行排序,并统计每一种排序上机所花费的时间。提示:除了基数排序其他用顺序存储结构。
时间: 2025-06-22 11:41:02 浏览: 13
为了演示如何使用C++编写这样一个程序,首先需要包含必要的头文件,创建随机数生成器,然后定义排序算法及其时间测量函数。这里仅提供基础代码示例,实际运行时你需要添加错误处理以及更详细的输出。
```cpp
#include <iostream>
#include <vector>
#include <cstdlib> // 对于rand()和srand()
#include <ctime> // 对于time()
#include <chrono>
// 生成随机整数
int random_number(int min, int max) {
static std::random_device rd;
static std::mt19937 g(rd());
return std::uniform_int_distribution<>(min, max)(g);
}
// 插入排序
template<typename T>
void insertion_sort(std::vector<T>& arr, double& time_used) {
auto start = std::chrono::high_resolution_clock::now();
for (size_t i = 1; i < arr.size(); ++i) {
T key = arr[i];
size_t j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
time_used += std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - start).count() / 1000.0; // 转换为秒并累加
}
// 其他排序方法... (类似地实现)
int main() {
const int N = 30000;
std::vector<int> numbers(N);
// 产生随机数组
srand(time(0));
for (int i = 0; i < N; ++i)
numbers[i] = random_number(0, 100000); // 可根据需要调整范围
double insertion_time = 0., bubble_time = 0., ...; // 初始化所有排序方法的时间计时器
// 分别对每个排序算法应用并计算时间
insertion_sort(numbers, insertion_time);
// ...其他排序算法...
// 输出结果及时间
std::cout << "Insertion Sort time: " << insertion_time << " seconds\n";
// ...其他排序方法的时间输出...
return 0;
}
```
这个程序只是一个基本框架,你需要为其他排序算法如冒泡排序、选择排序、快速排序、堆排序和归并排序写出相应的实现,并通过`chrono`库来测量每种排序所需的时间。此外,这将是一个单线程程序,如果你想要衡量并行版本的时间,可以考虑使用并行算法库(如`<execution>`)。
阅读全文
相关推荐
















