在C语言中如何测量插入排序处理数组dizi1的运行时间
插入排序运行时间测量实现方法
- 新增必要头文件
C标准库的time.h提供了时间测量相关的接口,需要在代码头部引入:
#include <time.h>
- 调整代码逻辑
- 为了避免IO操作干扰测量结果,建议将
insort函数中打印排序后数组的代码移除,移到计时结束后执行。 - 100个元素的插入排序耗时极短,可能出现测量结果为0的情况,建议将数组规模调整到10000及以上,测量结果更准确。
- 计时逻辑为:排序执行前记录CPU时钟数,排序结束后再次记录,两者差值除以时钟频率即可得到运行耗时。
- 完整修改后代码示例
#include <stdio.h> #include <stdlib.h> #include <time.h> // 纯排序逻辑,移除内部打印 void insort(int dizi[],int sinir) { int j, sakla; for(int i=1; i<sinir; i++){ sakla = dizi[i]; j = i; while(j > 0 && sakla < dizi[j-1]){ dizi[j] = dizi[j-1]; j--; } dizi[j] = sakla; } } int main(){ // 调大数组规模提升测量精度 int arr_size = 10000; int dizi1[arr_size]; // 初始化随机数种子,保证每次运行数组不一样 srand(time(NULL)); for (int i=0;i<arr_size;++i) { dizi1[i]=rand() % 100; } // 开始计时 clock_t start = clock(); insort(dizi1, arr_size); clock_t end = clock(); // 转换为毫秒单位输出 double cost_time = (double)(end - start) * 1000 / CLOCKS_PER_SEC; printf("排序运行耗时:%f 毫秒\n", cost_time); // 需要打印排序后数组可在此处添加循环打印逻辑 return 0; }
- 补充说明
如果要保留原数组打印逻辑,只需要把打印代码放在计时逻辑之外即可,不会影响排序耗时的统计结果。如果希望测量小数据量的排序耗时,可以循环执行排序1000次后取平均耗时,结果会更可靠。
内容的提问来源于stack exchange,提问作者Ahmet Kaya
相关产品推荐
相关产品推荐

