用c++设计一段代码:实现合并排序算法。要排序的整型数组元素可以用随机数生成器生成,运行程序,分别记录对十万,一百万,五千万,一千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果。
时间: 2024-12-21 20:21:18 浏览: 27
排序算法_随机生成1000个数字_用排序算法排序并比较算法的赋值次数_
5星 · 资源好评率100%
在C++中,我们可以使用递归的方式来实现合并排序算法。首先,我们需要一个函数`mergeSort`用于合并两个已经排好序的子序列,然后是主函数`main`来生成随机数组、进行排序并测量时间。
```cpp
#include <iostream>
#include <vector>
#include <cstdlib> // 需要用到rand()函数
#include <ctime> // 使用time()获取当前时间
#include <chrono> // 用于高精度计时
// 合并两个已排序的区间
void merge(std::vector<int>& arr, int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
std::vector<int> L(n1), R(n2);
for (int i = 0; i < n1; i++)
L[i] = arr[left + i];
for (int j = 0; j < n2; j++)
R[j] = arr[mid + 1 + j];
int i = 0, j = 0, k = left;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
// 合并排序函数
void mergeSort(std::vector<int>& arr, int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
// 主函数
int main() {
srand(time(0)); // 设置随机数种子
const int sizes[] = {100000, 1000000, 5000000, 10000000}; // 测试数组大小
int data[100]; // 存放100个随机数的小数组
for (size_t i = 0; i < 100; i++) {
data[i] = rand() % 1000; // 生成0~999之间的随机数
}
// 对小数组进行排序并打印结果
std::cout << "Sorting 100 elements:\n";
auto start_time = std::chrono::high_resolution_clock::now();
mergeSort(data, 0, 99);
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed = end_time - start_time;
double milliseconds = elapsed.count();
std::cout << "Time taken: " << milliseconds << " ms\n";
// 记录大数组排序所需时间
for (auto size : sizes) {
std::vector<int> large_arr(size);
for (int i = 0; i < size; i++) {
large_arr[i] = rand() % 1000;
}
start_time = std::chrono::high_resolution_clock::now();
mergeSort(large_arr, 0, size - 1);
end_time = stdchrono::high_resolution_clock::now();
elapsed = end_time - start_time;
milliseconds = elapsed.count();
std::cout << "Sorting " << size << " elements took: " << milliseconds << " ms\n";
}
return 0;
}
```
这个程序首先生成了一个包含100个随机数的小数组,并对其进行了排序。接着,它会按照给定的大小列表分别创建更大规模的随机数组,计算每个数组排序所需的毫秒数,并打印出结果。
阅读全文