为计算排序算法效率写的测试程序:
#include <iostream>
#include <ctime>
#include <fstream>
using namespace std;
class Timer
{
clock_t start_time;
public:
Timer(){start_time=clock();}
void elaspe()
/*计算时间*/
{
clock_t end_time=clock();
cout<<"It takes "<<(double)(end_time-start_time)/(double)CLK_TCK<<"seconds\n";
}
/*时间归零*/
void reset(){start_time=clock();}
};
#define maxSortNum 4 /*定义排序算法的个数(种类)*/
class CCompositor
{
int *a;
public:
CCompositor(){a=NULL;}
~CCompositor(){delete []a;}
void FileMenu();
void Initional(int i);
void GetFile(ifstream&is,int size);
void doCompose(int n);
/*这里假定只有4种排序*/
void sort_1();
void sort_2();
void sort_3();
void sort_4();
};
void CCompositor::sort_1()
{
//增加代码,完成你的算法
}
void CCompositor::sort_2()
{
//增加代码,完成你的算法
}
void CCompositor::sort_3()
{
//增加代码,完成你的算法
}
void CCompositor::sort_4()
{
//增加代码,完成你的算法
}
void CCompositor::GetFile(ifstream&is,int size)
{
//if(!is)exit(1);
delete a;a=NULL;
a=new int[size];
for(int i=0;i<size;i++)
is>>a[i];
}
void CCompositor::FileMenu()
/*列出所有不同类型的数据*/
{
cout<<" 算法比较数据文件目录\n";
cout<<" ——————————————"<<endl;
cout<<" 1. 数据长度20个, 顺序\n";
cout<<" 2. 数据长度200个, 顺序\n";
cout<<" 3. 数据长度2000个, 顺序\n";
cout<<" 4. 数据长度20个, 逆序\n";
cout<<" 5. 数据长度200个, 逆序\n";
cout<<" 6. 数据长度2000个, 逆序\n";
cout<<" 7. 数据长度20个, 随机\n";
cout<<" 8. 数据长度200个, 随机\n";
cout<<" 9. 数据长度2000个, 随机\n";
cout<<" 10.数据长度20个, 部分排序\n";
cout<<" 11.数据长度200个, 部分排序\n";
cout<<" 12.数据长度200个, 部分排序\n";
cout<<"请选择...";
}
void CCompositor::Initional(int i)
/*根据不同的文件数据进行数据加载*/
{
ifstream is;
switch(i)
{
case 1:is.open("order20.txt"); //长度20, 顺序
GetFile(is,20);break;
case 2:is.open("order200.txt"); //长度200, 顺序
GetFile(is,200);break;
case 3:is.open("order2000.txt"); //长度2000,顺序
GetFile(is,2000);break;
case 4:is.open("unOrder20.txt"); //长度20, 逆序
GetFile(is,20);break;
case 5:is.open("unOrder200.txt"); //长度200, 逆序
GetFile(is,200);break;
case 6:is.open("unOrder2000.txt"); //长度2000,逆序
GetFile(is,2000);break;
case 7:is.open("noOrder20.txt"); //长度20, 随机
GetFile(is,20);break;
case 8:is.open("noOrder200.txt"); //长度200, 随机
GetFile(is,200);break;
case 9:is.open("noOrder2000.txt"); //长度2000,随机
GetFile(is,2000);break;
case 10:is.open("partlyOrder20.txt"); //长度20, 部分排序
GetFile(is,20);break;
case 11:is.open("partlyOrder200.txt"); //长度200, 部分排序
GetFile(is,200);break;
case 12:is.open("partlyOrder2000.txt");//长度2000,部分排序
GetFile(is,2000);break;
default:cout<<"Can't find any file to associate your choice\n";
}
is.close();
}
void CCompositor::doCompose(int n)
{
switch(n)
{
case 1:sort_1();break;
case 2:sort_2();break;
case 3:sort_3();break;
case 4:sort_4();break;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
CCompositor compose;
compose.FileMenu();
int choice;cin>>choice;
compose.Initional(choice);
Timer time;
for(int j=0;j<maxSortNum;j++)
{
compose.doCompose(j+1);
time.elaspe();
time.reset();
}
return 0;
}