c++中计算运行时间 clock() clock

    技术2022-05-19  27

    我们在写程序时,常常会好奇,到底我们的几个算法那个好呢,这时,当然你可已使用大O技法来分析复杂度,当然,我认为还是使用编程来计算运算时间来的简单,而且,在数据面前,我们可以信服。 在C++的库函数中,已经给我们提供了这样的方法,clock(),我们可以使用它来计算程序的运行时间,闲话少说了,开门见山:  计算程序运行时间使用的知识点: 1clock_t 2clock() 3CLOCKS_PER_SEC  这些库函数、类型和常量都是定义在ctime库中的。下面就解释一下吧!  1clock_t数据类型,其实,当你打开time.h就知道了,就是个long型,用来记录一段时间内的clocks数,即CPU的运行单元时间。  2clocks()函数,返回类型clock_t,返回的是从程序开始,到你掉用clock()函数这段时间的clocks。  3CLOCK_PER_SRC     我们若想计算程序的运行时间,则只要根据程序的入口点和出口点出都计算clocks,再算差就可以了,都是在main()中进行操作,如下:            int main() {      clock_t start, end;    start = clock();    //省略    end = clock();        cout<<"Run time: "<<(double)(end - start) / CLOCKS_PER_SEC<<"S"<<endl;  return 0;    }            这样就ok了,我们来试试吧,都说一般情况下,由于递归的堆栈操作性能不好,不建议使用递归进行数值计算,那么,我们跑跑下面两个程序就知道原因了,它们都是求Fibonachi的。        递归:    #include <iostream>#include <ctime>

    using namespace std;

    unsigned int outFibonachi(int i);  //其中i表示其中的第几个数

    int main() {  clock_t start, end;

     start = clock();  for(int j = 1; j <= 30; j++) {  cout<<outFibonachi(j);  if( j % 5 == 0) {   cout<<"/n";  }else {   cout<<" , ";  }

     }

     end = clock();

     cout<<"Run time: "<<(double)(end - start) / CLOCKS_PER_SEC<<endl;

     return 0;}

    unsigned int outFibonachi(int i) { if(i <= 2) {  return 1; }else {  return outFibonachi(i - 1) + outFibonachi(i - 2); }

    }            非递归:        #include <iostream>#include <ctime>

    using namespace std;

    int main() { clock_t start, end;

     start = clock();  int a, b, i; a = 1; b = 1;

     for(i = 1; i <= 30; i++) {  if(i <= 2) {   cout<<1<<" , ";  }else {   cout<<(a+b);   if(i % 5 == 0)     cout<<"/n";   else    cout<<" , ";     a = b;   b = a + b;  }

        }

     end = clock();  cout<<"Run time: "<<(double)(end - start) / CLOCKS_PER_SEC<<endl;     return 0;

    }                    如果,效果不明显,就将计算规模扩大吧,可以套一层循环,哈哈哈

     


    最新回复(0)