以下的工具函数主要是针对整型数据,从小到大排序的规则评估排序算法的效率
- 数据自动生成函数
- 检测排序
- 计算所用时间
1数据生成函数##
生成大量测试数据
//rangeL,rangeR分别表示数据范围的左和右界限;n代表的是数据的总量
template <typename T>
T* randamCreadedArray(int n,int rangeL,int rangeR)
{
assert(rangeL<=rangeR);
T *array=new T[n];
srand(time(NULL));
for (int i=0; i<n; i++)
array[i]=rand()%(rangeR-rangeL+1)+rangeL;
return array;
}
2检测排序
保证排序正确
template <typename T>
bool isSort(T array[],int n)
{
for (int i=0; i<n-1; i++)
if (array[i]>array[i+1])
return false;
return true;
}
3. 计算所用时间##
计算时间效率
template <typename T>
void calculateSortTime(string sortName,void(*sort)(T[],int),T array[],int n)
{
clock_t startTime=clock();
sort(array,n);
clock_t endTime=clock();
assert(isSort(array,n));
cout<<left<<setw(15)<<sortName<<" : "<<double(endTime-startTime)/CLOCKS_PER_SEC<<"s"<<endl;
return;
}
完整代码
helper.h
#ifndef HELPER_H
#define HELPER_H
#include<iostream>
#include<ctime>
#include<cassert>
#include<iomanip>
using namespace std;
//把工具放在一个TestHelper命名空间里,以便重使用
namespace TestHelper
{
//生成测试数据
template <typename T>
T* randamCreadedArray(int n,int rangeL,int rangeR)
{
assert(rangeL<=rangeR);
T *array=new T[n];
srand(time(NULL));
for (int i=0; i<n; i++)
array[i]=rand()%(rangeR-rangeL+1)+rangeL;
return array;
}
//判断是否排序成功
template <typename T>
bool isSort(T array[],int n)
{
for (int i=0; i<n-1; i++)
if (array[i]>array[i+1])
return false;
return true;
}
//测试排序所用时间
template <typename T>
void calculateSortTime(string sortName,void(*sort)(T[],int),T array[],int n)
{
clock_t startTime=clock();
sort(array,n);
clock_t endTime=clock();
assert(isSort(array,n));
cout<<left<<setw(15)<<sortName<<" : "<<double(endTime-startTime)/CLOCKS_PER_SEC<<"s"<<endl;
return;
}
}
#endif
test.cpp
#include<iostream>
#include<ctime>
#include "helper.h"
using namespace std;
int main(){
int numbers = 100;
int* arr = TestHelper::randamCreadedArray<int>(numbers,1,500) ;
for(int i=0;i< numbers;i++){
cout<<arr[i];
i<numbers-1?cout<<",":cout<<endl;
}
return 0;
}