fork download
  1. #include <set>
  2. #include <algorithm> // std::random_shuffle
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. template<class T,size_t N> void view(const T (&ar)[N])
  7. {
  8. cout<<"ar[]={";
  9. for(size_t n=0;n<N-1;++n) cout<<ar[n]<<",";
  10. cout<<ar[N-1]<<"}\n";
  11. }
  12.  
  13. template<class T,size_t N> void mysort(T (&ar)[N])
  14. {
  15. typedef multiset<T> Myset;
  16. typedef typename Myset::iterator It;
  17.  
  18. Myset myset(ar,ar+N);
  19.  
  20. //отладочный вывод:
  21. //It it = myset.begin(); size_t n=0;
  22. //while(it!=myset.end()){ cout<< n<<" : "<< *it<<endl; ++it;++n; }
  23. //--------------------------------------------
  24.  
  25. const size_t num_one = myset.count(1);
  26. const size_t num_two = myset.count(2);
  27. const int tail_el = (num_two>num_one)? 2: 1;
  28.  
  29. const size_t lenbody = min(num_two,num_one);
  30. const size_t lentail = max(num_two,num_one)-lenbody;
  31.  
  32. //отладочный вывод:
  33. //cout<<"number of 1 : "<<num_one<<endl;
  34. //cout<<"number of 2 : "<<num_two<<endl;
  35. //cout<<"tail : "<<lentail<<endl;
  36. //cout<<"tail_element: "<<tail_el<<endl;
  37. //cout<<"body : "<<lenbody<<endl;
  38. //--------------------------------------------
  39.  
  40. const size_t size = lenbody*2;
  41. for(size_t n=0;n<size;n+=2) { ar[n]=1; ar[n+1]=2; }
  42. for(size_t n=size;n< N; ++n) ar[n]=tail_el;
  43. }
  44.  
  45.  
  46.  
  47. template<class T,size_t N> void test_sort(T (&ar)[N])
  48. {
  49. std::random_shuffle ( ar, ar+N );
  50. mysort(ar);
  51. }
  52.  
  53. template<class T> bool check_array(const T (&ar)[15])
  54. {
  55. int re[]={1,2,1,2,1,2,1,2,1,2,1,2,2,2,2};
  56. cout<<"expected: \n"; view(re);
  57.  
  58. size_t n=0;
  59. while( n<15 && re[n]==ar[n]) ++n;
  60. return n==15;
  61. }
  62.  
  63.  
  64.  
  65.  
  66. int main()
  67. {
  68. cout<<"WELLCOME TO TESTING MY ALGORITHM\n\n";
  69.  
  70.  
  71. bool all_valid=true;
  72. for(size_t n=0;n<10;++n)
  73. {
  74. int ar[]={2,1,1,1,2,1,2,2,1,1,2,2,2,2,2};
  75.  
  76. view(ar);
  77. test_sort(ar);
  78. cout<<"actual: \n"; view(ar);
  79.  
  80. const bool is_valid = check_array(ar);
  81.  
  82. if(is_valid) cout<<"success!!!!\n";
  83. else
  84. {
  85. cout<< "failed";
  86. all_valid = false;
  87. }
  88. }
  89.  
  90. cout<< (all_valid? "all testing are valid": "part tests are failed" )<<endl;
  91. return 0;
  92. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
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