增加测试函数计算排序函数运行时间

来源:互联网 发布:最火淘宝店铺 编辑:程序博客网 时间:2024/06/05 19:31

要想比较两个函数的效率,最直观的方法莫过于比较两个排序函数排序同一个数组的时间,哪个函数花的时间更少,则该函数的运行效率相对较高,因此,我们需要在头文件中引入一个测试函数,能够较为直观的返回排序函数排序数组所花费的时间。

以下为具体的代码实现:


首先需要编写一个判断函数,用来判断数组是否已经排序完成,代码如下:

template<typename T>  bool issorted(T arr[],int n)  {      for(int i=0;i<n-1;i++)//注意i的范围最大只能取到i-2,防止数组越界,产生异常      {          if(arr[i]>arr[i+1]) return false;      }      return true;  }

接下来是正式的测试函数,用来测试排序函数所花费的时间,函数代码如下:

 template<typename T>  void testsort(string sortname,void(*sortn)(T [],int),T arr[],int n)  {//传入一个数组的名字,排序数组的数字,待排序数组的指针以及数组的大小n      clock_t starttime=clock();//cloce_t为循环周期变量      sortn(arr,n);      clock_t endtime=clock();      assert(issorted(arr,n));//检测数组是否成功排序,防止计算错误的时间      cout<<sortname<<":"<<double(endtime-starttime)/CLOCKS_PER_SEC<<"s"<<endl;    //clock_t为循环周期个数,用其除以每个循环周期所花费的时间(CLOCK_PER_SEC),则得到时间      return;  }


测试10000个数据所花费的时间:




测试100000个数据所花费的时间




第一次测试10000个数据所花费的时间为0.139s,测试100000个数据所花费的时间为13.276s,因此我们不难发现,数据的量数增长到10倍,而所花费的时间却增长到100倍(13.276/0.139=100),因此该选择排序的算法复杂度为O(N2).

原创粉丝点击