#include <set> #include <algorithm> // std::random_shuffle #include <iostream> using namespace std; template<class T,size_t N> void view(const T (&ar)[N]) { cout<<"ar[]={"; for(size_t n=0;n<N-1;++n) cout<<ar[n]<<","; cout<<ar[N-1]<<"}\n"; } template<class T,size_t N> void mysort(T (&ar)[N]) { typedef multiset<T> Myset; typedef typename Myset::iterator It; Myset myset(ar,ar+N); //отладочный вывод: //It it = myset.begin(); size_t n=0; //while(it!=myset.end()){ cout<< n<<" : "<< *it<<endl; ++it;++n; } //-------------------------------------------- const size_t num_one = myset.count(1); const size_t num_two = myset.count(2); const int tail_el = (num_two>num_one)? 2: 1; const size_t lenbody = min(num_two,num_one); const size_t lentail = max(num_two,num_one)-lenbody; //отладочный вывод: //cout<<"number of 1 : "<<num_one<<endl; //cout<<"number of 2 : "<<num_two<<endl; //cout<<"tail : "<<lentail<<endl; //cout<<"tail_element: "<<tail_el<<endl; //cout<<"body : "<<lenbody<<endl; //-------------------------------------------- const size_t size = lenbody*2; for(size_t n=0;n<size;n+=2) { ar[n]=1; ar[n+1]=2; } for(size_t n=size;n< N; ++n) ar[n]=tail_el; } template<class T,size_t N> void test_sort(T (&ar)[N]) { std::random_shuffle ( ar, ar+N ); mysort(ar); } template<class T> bool check_array(const T (&ar)[15]) { int re[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2}; cout<<"expected: \n"; view(re); size_t n=0; while( n<15 && re[n]==ar[n]) ++n; return n==15; } int main() { cout<<"WELLCOME TO TESTING MY ALGORITHM\n\n"; bool all_valid=true; for(size_t n=0;n<10;++n) { int ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2}; view(ar); test_sort(ar); cout<<"actual: \n"; view(ar); const bool is_valid = check_array(ar); if(is_valid) cout<<"success!!!!\n"; else { cout<< "failed"; all_valid = false; } } cout<< (all_valid? "all testing are valid": "part tests are failed" )<<endl; return 0; }
Standard input is empty
WELLCOME TO TESTING MY ALGORITHM ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2} actual: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} expected: ar[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2} success!!!! all testing are valid