对数器的概念和作用见这篇文章:
https://blog.csdn.net/weixin_42513339/article/details/101779755
花了点时间写了vector和数组的对数器,个人觉得代码还能优化,这里先贴下
#include <iostream>
#include<cstdlib>
#include<ctime>
#include<vector>
using namespace std;
//数组(vector)对数器---------------------------------------------------
//1.数组转vector(若一开始就剩vector便忽略)
vector<int> ATransformV(int* a, int len){
vector<int>arr;
for(int i = 0; i < len; i++)
arr.push_back(a[i]);
return arr;
}
//vector转数组(若一开始就剩vector便忽略)
int* VTransformA(vector<int>a,int len){
int* arr = new int[len];
for(int i =0; i<len; i++)
arr[i] = a[i];
return arr;
}
//2.产生随机数组,注:srand不能放在此函数中,否则导致一秒内产生的数组内相同
vector<int> randomArr(int maxValue,int maxSize){
vector<int>arr;
for(int i = 0; i < maxSize; i++){
arr.push_back(rand() % maxValue) ;
}
return arr;
}
//3.比较两个输出数组是否相等(验证方法正确性);
bool Compare(vector<int> arr1,vector<int> arr2){
if(arr1.empty() && arr2.empty()) return true;
if((arr1.empty() && !arr2.empty()) || (!arr1.empty() && arr2.empty()))
return true;
if(arr1.size() != arr2.size()) return false;
for(int i = 0; i < arr1.size(); i ++){
if(arr1[i] != arr2[i])
return false;
}
return true;
}
//仅用于打印测试
void printArr(vector<int>arr){
cout<<"len = "<<arr.size()<<endl;
for(int i =0; i < arr.size(); i++)
cout<<arr[i]<<" ";
putchar(10);
cout<<"---------------------------------------------"<<endl;
}
//4.调用函数
void alguTest(int time = 5000, int maxValue = 5000, int maxSize = 500){
for (int i = 0; i<time; i++) {
vector<int>arr1 = randomArr(maxValue,maxSize); //第一个数组
vector<int>arr2(arr1); //第二个数组
//复杂度高算法-对arr1操作
//
//自己写的算法对arr2操作
//
if (!Compare(arr1, arr2)) {
cout<<"Error"<<endl;
cout<<"arr1:"<<endl;
printArr(arr1);
cout<<"arr2:"<<endl;
printArr(arr2);
break;
}
}
cout<<"Right"<<endl;
}
//数组对数器---------------------------------------------------
int main()
{
srand(time(0));
alguTest();
return 0;
}
用法的话,数组对数器的代码加上,在main函数里加上srand(),就可以调用了,自己写的算法和正确算法在alguTest中写上即可。(注意:若自己的算法传参是数组,那么就需要把vector样例先转换成数组,再传入;若算法结果是数组,那么再转回vector)
冒泡算法例子:
#include <iostream>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<algorithm>
using namespace std;
void mySwap(int* a, int* b){
if(a!=b){
(*a) ^= (*b);
(*b) ^= (*a);
(*a) ^= (*b);
}
}
//冒泡
void bubbleSort(int* arr,int len){
for(int i = 0; i < len -1; i++){
for(int j = 0; j < len - 1 - i; j++){
if(arr[j] > arr[j+1])
mySwap(&arr[j],&arr[j+1]);
}
}
}
//数组(vector)对数器---------------------------------------------------
/*中间步骤省略*/
//4.调用函数
void alguTest(int time = 5000, int maxValue = 5000, int maxSize = 500){
for (int i = 0; i<time; i++) {
vector<int>arr1 = randomArr(maxValue,maxSize); //第一个数组
vector<int>arr2(arr1); //第二个数组
//复杂度高算法-对arr1操作
sort(arr1.begin(),arr1.end());
//自己写的算法对arr2操作
int len2 = arr2.size();
int* arr3 = VTransformA(arr2,len2);//由于冒泡算法传参数组,先vector转数组
bubbleSort(arr3,len2);
arr2 =ATransformV(arr3,len2); //数组转成vector
if (!Compare(arr1, arr2)) {
cout<<"Error"<<endl;
cout<<"arr1:"<<endl;
printArr(arr1);
cout<<"arr2:"<<endl;
printArr(arr2);
break;
}
}
cout<<"Right"<<endl;
}
//数组对数器---------------------------------------------------
int main()
{
srand(time(0));
alguTest();
return 0;
}