实现合并排序算法。要排序的整型数组元素可以用随机数生成器生成,运行程序,分别记录对十万,一百万,一千万,五千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果C语言实现
时间: 2024-05-02 09:16:27 浏览: 174
下面是C语言实现合并排序算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void merge(int arr[], int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
int leftArr[n1], rightArr[n2];
for (int i = 0; i < n1; i++) {
leftArr[i] = arr[left + i];
}
for (int j = 0; j < n2; j++) {
rightArr[j] = arr[mid + 1 + j];
}
int i = 0, j = 0, k = left;
while (i < n1 && j < n2) {
if (leftArr[i] <= rightArr[j]) {
arr[k] = leftArr[i];
i++;
} else {
arr[k] = rightArr[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = leftArr[i];
i++;
k++;
}
while (j < n2) {
arr[k] = rightArr[j];
j++;
k++;
}
}
void mergeSort(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);
}
}
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[100];
srand(time(NULL));
printf("Before sorting: ");
for (int i = 0; i < 100; i++) {
arr[i] = rand() % 100;
printf("%d ", arr[i]);
}
printf("\nAfter sorting: ");
mergeSort(arr, 0, 99);
printArray(arr, 100);
int sizes[4] = {100000, 1000000, 10000000, 50000000};
double times[4];
for (int i = 0; i < 4; i++) {
int size = sizes[i];
int arr[size];
for (int j = 0; j < size; j++) {
arr[j] = rand() % size;
}
clock_t t1 = clock();
mergeSort(arr, 0, size - 1);
clock_t t2 = clock();
times[i] = (double)(t2 - t1) / CLOCKS_PER_SEC;
}
printf("\n\n");
printf("Size\tTime\n");
for (int i = 0; i < 4; i++) {
printf("%d\t%lf\n", sizes[i], times[i]);
}
return 0;
}
```
这个程序实现了合并排序算法,并且在程序中生成了不同大小的随机数数组进行排序。程序先生成了一个大小为100的随机数组,并对其进行排序并输出结果。然后程序生成了四个更大的随机数组,分别为10万、100万、1000万和5000万个元素,并统计了排序所用的时间。最后,程序输出了这些时间的统计结果。
你可以根据自己的需要修改程序中的数组大小和随机数的范围,以及输出结果的格式。
阅读全文