利用c++ 用随机函数产生20,000个数据,利用插入排序、冒泡排序、选择排序、快速排序、堆排序、归并排序方法进行排序,并统计每种排序算法花费的时间。注意采用顺序储存结构。
时间: 2024-12-24 09:31:45 浏览: 31
在C++中,你可以使用`<random>`库生成随机数,`<ctime>`库获取当前时间来作为基准,`<chrono>`库测量程序运行时间。以下是使用这些工具生成随机数并分别对它们进行六种排序算法的排序以及时间统计的基本步骤:
首先,你需要包含必要的头文件并定义随机数生成器和分布:
```cpp
#include <iostream>
#include <vector>
#include <random>
#include <chrono>
#include <ctime>
```
接下来,创建一个函数生成指定数量的随机整数:
```cpp
std::vector<int> generateRandomNumbers(int n) {
std::vector<int> numbers(n);
std::default_random_engine generator(std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_int_distribution<int> distribution(0, 19999); // 设定最大值为20000 - 1
for (int& num : numbers) {
num = distribution(generator);
}
return numbers;
}
```
然后,为每种排序算法编写实现,并记录开始时间和结束时间:
```cpp
template<typename Compare>
void sortAndMeasureTime(std::vector<int>& arr, Compare compare) {
auto start = std::chrono::high_resolution_clock::now();
// 你的排序算法实现...
// 对于插入排序、冒泡排序、选择排序、快速排序、堆排序和归并排序的具体实现
auto end = std::chrono::high_resolution_clock::now();
// 计算时间差并打印结果
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
std::cout << "Sorted using " << typeid(compare).name() << ": " << duration.count() << " microseconds.\n";
}
// 使用函数模板实例化每种排序
int main() {
const int size = 20000;
std::vector<int> numbers = generateRandomNumbers(size);
// 对每种排序算法应用上面的sortAndMeasureTime函数
sortAndMeasureTime(numbers, std::less<int>());
// ...重复以上行,替换为冒泡排序、选择排序等其他比较器...
return 0;
}
```
在这个示例中,你需要提供每种排序算法的具体实现,如`insertionSort`, `bubbleSort`, `selectionSort`, `quickSort`, `heapSort`, 和 `mergeSort`。然后,每个函数会接受一个整数向量和一个比较器(如`std::less<int>`),并记录从开始到结束的时间。
阅读全文