用c语言实现随机生成1000个整数(rand0),输出到文件里 ,将这1000个数字分别进行合并排序和快速排序,输出到另一个文件里,并比较两种方法的实际运行时间
时间: 2024-03-07 07:47:29 浏览: 140
利用随机函数产生30000个随机整数进行排序,并统计每一种排序上机所花费的时间
5星 · 资源好评率100%
好的,以下是 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUMS_COUNT 1000 // 数字的个数
// 合并排序
void merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0;
j = 0;
k = l;
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(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 cmpfunc(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
int main() {
int rand_nums[NUMS_COUNT];
FILE* fp;
// 生成随机数并写入文件
fp = fopen("file.txt", "w");
srand(time(NULL));
for (int i = 0; i < NUMS_COUNT; i++) {
rand_nums[i] = rand() % 1000;
fprintf(fp, "%d\n", rand_nums[i]);
}
fclose(fp);
// 读取随机数并进行合并排序
fp = fopen("file.txt", "r");
int merge_sort_nums[NUMS_COUNT];
for (int i = 0; i < NUMS_COUNT; i++) {
fscanf(fp, "%d", &merge_sort_nums[i]);
}
fclose(fp);
clock_t t;
t = clock();
mergeSort(merge_sort_nums, 0, NUMS_COUNT - 1);
t = clock() - t;
fp = fopen("merge_sort.txt", "w");
for (int i = 0; i < NUMS_COUNT; i++) {
fprintf(fp, "%d\n", merge_sort_nums[i]);
}
fclose(fp);
printf("Merge sort time: %f seconds\n", ((float)t) / CLOCKS_PER_SEC);
// 读取随机数并进行快速排序
fp = fopen("file.txt", "r");
int quick_sort_nums[NUMS_COUNT];
for (int i = 0; i < NUMS_COUNT; i++) {
fscanf(fp, "%d", &quick_sort_nums[i]);
}
fclose(fp);
t = clock();
qsort(quick_sort_nums, NUMS_COUNT, sizeof(int), cmpfunc);
t = clock() - t;
fp = fopen("quick_sort.txt", "w");
for (int i = 0; i < NUMS_COUNT; i++) {
fprintf(fp, "%d\n", quick_sort_nums[i]);
}
fclose(fp);
printf("Quick sort time: %f seconds\n", ((float)t) / CLOCKS_PER_SEC);
return 0;
}
```
在这个 C 语言实现中,我们使用了两种排序算法:合并排序和快速排序。我们首先生成了1000个随机整数,并将它们写入文件中。然后,我们读取文件中的随机数,并使用两种排序算法对它们进行排序。
在代码中,我们使用了 clock 函数来计算两种排序算法的运行时间。我们还定义了一个 cmpfunc 函数来作为 qsort 函数中的比较函数。
最后,我们将排序后的结果写入文件中,同样每个整数一行。请注意,在代码中,我们使用了 fprintf 函数向文件中写入整数,使用 \n 作为每个整数的分隔符。
阅读全文