對數器的概念和作用見這篇文章:
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;
}