使用c++1.实现合并排序算法。要排序的整型数组元素可以用随机数生成器生成,运行程序,分别记录对十万,一百万,一千万,五千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果。
时间: 2024-03-24 08:35:38 浏览: 14
好的,我可以帮你实现这个算法。以下是 C++ 的代码实现:
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void merge(int arr[], int l, int m, int r) {
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (int i = 0; i < n1; i++) {
L[i] = arr[l + i];
}
for (int j = 0; j < n2; j++) {
R[j] = arr[m + 1 + j];
}
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k++] = L[i++];
} else {
arr[k++] = R[j++];
}
}
while (i < n1) {
arr[k++] = L[i++];
}
while (j < n2) {
arr[k++] = R[j++];
}
}
void mergeSort(int arr[], int l, int r) {
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
int main() {
int n[4] = {100000, 1000000, 10000000, 50000000};
clock_t start, end;
double timeUsed;
for (int i = 0; i < 4; i++) {
int* arr = new int[n[i]];
srand((unsigned) time(NULL));
for (int j = 0; j < n[i]; j++) {
arr[j] = rand();
}
start = clock();
mergeSort(arr, 0, n[i] - 1);
end = clock();
timeUsed = (double) (end - start) / CLOCKS_PER_SEC;
cout << "Sorting " << n[i] << " elements took " << timeUsed << " seconds." << endl;
delete [] arr;
}
int arr[100];
srand((unsigned) time(NULL));
for (int i = 0; i < 100; i++) {
arr[i] = rand();
}
mergeSort(arr, 0, 99);
cout << "The first 100 elements after sorting:" << endl;
for (int i = 0; i < 100; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
以上代码会生成四个不同长度的随机数数组,并对它们分别进行排序,并输出排序所用的时间。同时,它还会生成一个长度为 100 的随机数数组,并对其进行排序,然后输出排序后的前 100 个元素。
你可以在本地编译并运行此程序,根据输出结果记录数据并制作表格。
阅读全文