前言:笔者在学习数据结构经典问题“四种方法求解最大子列和”时,遇到了一个需求:计时是重复动作,因此想创建一个可以为算法运行时间计时的函数。由于计时的特殊性(被计时的函数要被掐头又掐尾),因此要设计一个能调用函数的函数。这就涉及到 回调函数 / 函数指针 的应用了(初学C/C++时,不了解回调函数提出的意义,现在因为自己的需求明白了)。
附:最大子列和问题的四种解法为:暴力法O(n3)、不做重复加法O(n2)、二分法O(n log2(n))、在线处理法O(n),详细解析请见笔者的笔记算法实例:最大子列和,实现代码于ds_cou_1_maxSum.cpp。
需求分析
#include <time.h>
#include <stdio.h>
#define MAXK 1e5
clock_t start, stop;
double duration;
start = clock();
for (int i = 0; i < MAXK; i++)
{
foo(10, 1.1);
}
stop = clock();
duration = ((double)(stop - start) / CLK_TCK / MAXK);
printf("ticks2 = %f\n", (double)(stop - start));
printf