您的位置:首页 > 其它

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

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

以下为具体的代码实现:

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

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).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: