用C语言编写一个可运行代码,将三分钟内插入排序可以处理的伪随机数,放入归并排序并,输出时间
时间: 2024-10-14 14:09:27 浏览: 21
将各类排序方式用C语言代码编译成功并运行,比较各种排序方式所用时间大小及不同编译器下时间的差异
以下是使用C语言编写的简单示例,该程序首先生成一定数量的伪随机数,并使用插入排序对它们进行排序。然后,将这些已排序的数组传递给归并排序函数,最后计算整个过程所需的时间。请注意,这里并没有直接测量CPU时间,而是通过`CLOCKS_PER_SEC`常量和`clock()`函数间接估算。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 插入排序函数
void insertion_sort(int arr[], int n) {
int i, j, key;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
// 归并排序函数
void merge_sort(int arr[], int l, int r) {
if (l < r) {
int m = l + (r - l) / 2;
merge_sort(arr, l, m);
merge_sort(arr, m + 1, r);
int i = l, j = m + 1, k = l;
while (i <= m && j <= r) {
if (arr[i] <= arr[j])
arr[k++] = arr[i++];
else
arr[k++] = arr[j++];
}
while (i <= m)
arr[k++] = arr[i++];
while (j <= r)
arr[k++] = arr[j++];
}
}
int main() {
srand(time(0)); // 设置随机种子
const int size = 1000; // 随机数的数量
int* numbers = malloc(size * sizeof(int));
// 生成并插入排序随机数
for (int i = 0; i < size; ++i) {
numbers[i] = rand() % 1000; // 生成0到999之间的随机数
}
clock_t start_insertion = clock();
insertion_sort(numbers, size);
clock_t end_insertion = clock();
// 输出插入排序耗时
double time_insertion = ((double)(end_insertion - start_insertion)) / CLOCKS_PER_SEC;
printf("Insertion sort took %.2f seconds.\n", time_insertion);
// 开始归并排序
clock_t start_merge = clock();
merge_sort(numbers, 0, size - 1);
clock_t end_merge = clock();
// 计算并输出归并排序耗时
double time_merge = ((double)(end_merge - start_merge)) / CLOCKS_PER_SEC;
printf("Merge sort took %.2f seconds.\n", time_merge);
free(numbers); // 释放内存
return 0;
}
```
阅读全文