用随机数产生100000个待排序数据元素的关键字值。测试下列各排序函数的机器实际执行时间(至少测试两个):直接插入排序、希尔排序(增量为4,2,1)、冒泡排序、快速排序、直接选择排序、二路归并排序、堆排序和基于链式队列的基数排序。
时间: 2024-03-24 21:40:04 浏览: 192
编程实现希尔、快速、堆、归并排序算法,随机产生10000个随机数存入磁盘文件,读取,并将不同排序方法的结果存入文件中(含报告)
5星 · 资源好评率100%
为了测试各个排序算法的执行时间,我们可以使用C语言中的`time.h`库中的`clock()`函数来计时。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100000
void directInsertSort(int a[], int n);
void shellSort(int a[], int n);
void bubbleSort(int a[], int n);
void quickSort(int a[], int left, int right);
void selectSort(int a[], int n);
void mergeSort(int a[], int left, int right);
void heapSort(int a[], int n);
void radixSort(int a[], int n);
int main() {
int a[N];
int i;
srand(time(NULL)); // 初始化随机数生成器
// 生成随机数据
for (i = 0; i < N; i++) {
a[i] = rand();
}
// 测试直接插入排序
clock_t start = clock();
directInsertSort(a, N);
clock_t end = clock();
printf("直接插入排序用时:%f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
// 测试希尔排序
start = clock();
shellSort(a, N);
end = clock();
printf("希尔排序用时:%f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
// 测试冒泡排序
start = clock();
bubbleSort(a, N);
end = clock();
printf("冒泡排序用时:%f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
// 测试快速排序
start = clock();
quickSort(a, 0, N - 1);
end = clock();
printf("快速排序用时:%f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
// 测试直接选择排序
start = clock();
selectSort(a, N);
end = clock();
printf("直接选择排序用时:%f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
// 测试二路归并排序
start = clock();
mergeSort(a, 0, N - 1);
end = clock();
printf("二路归并排序用时:%f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
// 测试堆排序
start = clock();
heapSort(a, N);
end = clock();
printf("堆排序用时:%f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
// 测试基数排序
start = clock();
radixSort(a, N);
end = clock();
printf("基数排序用时:%f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
```
在这个程序中,我们首先使用`rand()`函数生成了100000个随机数,然后分别对这些随机数使用各个排序算法进行排序,并使用`clock()`函数计时。最后,我们将各个算法的执行时间输出到控制台上。
需要注意的是,由于不同机器的性能和CPU时钟频率可能不同,因此这个程序的输出结果可能会有所不同。但是,这个程序可以作为一个简单的测试框架,帮助我们比较各个排序算法的执行效率。
阅读全文