AmateurKid

Untitled

Dec 20th, 2021
693
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <chrono>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8.  
  9.  
  10. void print_vec(vector<int> vec, int arr_size) {
  11.     int max_arr;
  12.     if (arr_size > 30) { //если количество символов больше 30, то сортируются все, но выводятся лишь первые 30 отсортированных
  13.         max_arr = 30;
  14.     }
  15.     else {
  16.         max_arr = arr_size;
  17.     }
  18.  
  19.     for (int i = 0; i < max_arr; i++)
  20.         cout << vec[i] << ' ';
  21. }
  22.  
  23. void sort_vec(vector<int>& vec) {
  24.    
  25.     sort(vec.begin(), vec.end()); //сортировка функцией
  26.    
  27.  
  28. }
  29.  
  30. void qsort(int b, int e, vector<int>& vec)
  31. {
  32.    
  33.     int l = b, r = e;
  34.     int piv = vec[(l + r) / 2]; // Опорным элементом для примера возьмём средний
  35.     while (l <= r)
  36.     {
  37.         while (vec[l] < piv)
  38.             l++;
  39.         while (vec[r] > piv)
  40.             r--;
  41.         if (l <= r)
  42.             swap(vec[l++], vec[r--]);
  43.     }
  44.     if (b < r)
  45.         qsort(b, r, vec);
  46.     if (e > l)
  47.         qsort(l, e, vec);
  48.    
  49. }
  50.  
  51.  
  52. int main()
  53. {
  54.     char answ;
  55.     do {
  56.         int arr_size;
  57.         char answ_input;
  58.         cout << "Enter array size>>";
  59.         cin >> arr_size;
  60.         int a;
  61.  
  62.         while (cin.fail() || arr_size <= 1 || cin.peek() != '\n')
  63.         {
  64.             cout << "Error, invalid parameters \n";
  65.             cin.clear();
  66.             cin.ignore(10000, '\n');
  67.             cout << "Enter array size>>";
  68.             cin >> arr_size;
  69.         }
  70.  
  71.  
  72.  
  73.         vector <int> vec1;
  74.         vector <int> vec2;
  75.         vec1.reserve(arr_size);
  76.         vec1.reserve(arr_size);
  77.  
  78.  
  79.         cout << "How to fill vector?(1 - from keyboard, 2 - random numbers, 3 - random numbers sorted backwards>>";
  80.         cin >> answ_input;
  81.         while (cin.fail() || cin.peek() != '\n' && answ_input != '1' && answ_input != '2' && answ_input != '3')
  82.         {
  83.             cin.clear();
  84.             cin.ignore(10000, '\n');
  85.             cout << "Error, invalid parameters \n";
  86.             cout << "Random numbers or  in vector or sorted backwards[1/2]";
  87.             cin >> answ_input;
  88.         }
  89.  
  90.         if (answ_input == '1') {
  91.             for (int i = 0; i < arr_size; i++) { //заполняем вектор
  92.                 cout << "Enter " << i + 1 << " element>>";
  93.                 cin >> a;
  94.                 while (cin.fail() || cin.peek() != '\n')
  95.                 {
  96.                     cin.clear();
  97.                     cin.ignore(10000, '\n');
  98.                     cout << "Error, invalid parameter \n";
  99.                     cin >> a;
  100.                 }
  101.                 vec1.push_back(a);
  102.                 vec2.push_back(a);
  103.             }
  104.             auto start1 = chrono::high_resolution_clock::now(); //конец отсчёта времени
  105.             sort_vec(vec1);
  106.             auto end1 = chrono::high_resolution_clock::now(); //точка отсчёт времени начала сортировки функции
  107.             chrono::duration <double> duration1 = end1 - start1; //считаем время работы сортировки функцией
  108.             cout << "Library sorted this vector in " << duration1.count() << endl; // считаем время
  109.  
  110.  
  111.             auto start2 = chrono::high_resolution_clock::now(); //точка отсчёт времени начала сортировки функции
  112.             qsort(0, (arr_size - 1), vec2);
  113.             auto end2 = chrono::high_resolution_clock::now(); //конец отсчёта времени
  114.             chrono::duration <double> duration2 = end2 - start2; //считаем время работы сортировки функцией
  115.             cout << "Algorithm sorted this vector in " << duration2.count() << endl; // считаем время
  116.  
  117.             print_vec(vec1, arr_size);
  118.             cout << endl;
  119.             print_vec(vec2, arr_size);
  120.  
  121.             if (duration1.count() - duration2.count() > 0)
  122.             {
  123.                 cout << "The function was faster by " << (duration1.count() / duration2.count()) * 1000 << " ms \n";
  124.             }
  125.             else
  126.             {
  127.                 cout << "The algorithm was faster by " << abs((duration1.count() / duration2.count())) * 1000 << " ms \n";
  128.             }
  129.  
  130.         }
  131.         else if (answ_input == '2') {
  132.             for (int i = 0; i < arr_size; i++) { //заполняем вектор
  133.                 a = rand() % 100;
  134.                 vec1.push_back(a);
  135.                 vec2.push_back(a);
  136.             }
  137.             auto start1 = chrono::high_resolution_clock::now(); //конец отсчёта времени
  138.             sort_vec(vec1);
  139.             auto end1 = chrono::high_resolution_clock::now(); //точка отсчёт времени начала сортировки функции
  140.             chrono::duration <double> duration1 = end1 - start1; //считаем время работы сортировки функцией
  141.             cout << "Library sorted this vector in " << duration1.count() << endl; // считаем время
  142.            
  143.  
  144.             auto start2 = chrono::high_resolution_clock::now(); //точка отсчёт времени начала сортировки функции
  145.             qsort(0, (arr_size - 1), vec2);
  146.             auto end2 = chrono::high_resolution_clock::now(); //конец отсчёта времени
  147.             chrono::duration <double> duration2 = end2 - start2; //считаем время работы сортировки функцией
  148.             cout << "Algorithm sorted this vector in " << duration2.count() << endl; // считаем время
  149.  
  150.             print_vec(vec1, arr_size);
  151.             cout << endl;
  152.             print_vec(vec2, arr_size);
  153.  
  154.             if (duration1.count() - duration2.count() > 0)
  155.             {
  156.                 cout << "The function was faster by " << (duration1.count() / duration2.count()) * 1000 << " ms \n";
  157.             }
  158.             else
  159.             {
  160.                 cout << "The algorithm was faster by " << abs((duration1.count() / duration2.count())) * 1000 << " ms \n";
  161.             }
  162.         }
  163.         else if (answ_input == '3') {
  164.             for (int i = 0; i < arr_size; i++) { //заполняем вектор
  165.                 a = rand() % 100;
  166.                 vec1.push_back(a);
  167.                 vec2.push_back(a);
  168.             }
  169.  
  170.             auto start1 = chrono::high_resolution_clock::now(); //конец отсчёта времени
  171.             sort_vec(vec1);
  172.             for (int i = 0; i < arr_size - 1; i++) {
  173.                 swap(vec1[i], vec1[arr_size - 1 - i]);
  174.             }
  175.             auto end1 = chrono::high_resolution_clock::now(); //точка отсчёт времени начала сортировки функции
  176.             chrono::duration <double> duration1 = end1 - start1; //считаем время работы сортировки функцией
  177.             cout << "Library sorted this vector in " << duration1.count() << endl; // считаем время
  178.  
  179.             auto start2 = chrono::high_resolution_clock::now(); //точка отсчёт времени начала сортировки функции
  180.             qsort(0, (arr_size - 1), vec2);
  181.             for (int i = 0; i < arr_size - 1; i++) {
  182.                 swap(vec2[i], vec2[arr_size - 1 - i]);
  183.             }
  184.             auto end2 = chrono::high_resolution_clock::now(); //конец отсчёта времени
  185.             chrono::duration <double> duration2 = end2 - start2; //считаем время работы сортировки функцией
  186.             cout << "Algorithm sorted this vector in " << duration2.count() << endl; // считаем время
  187.  
  188.             print_vec(vec1, arr_size);
  189.             cout << endl;
  190.             print_vec(vec2, arr_size);
  191.  
  192.             if (duration1.count() - duration2.count() > 0)
  193.             {
  194.                 cout << "The function was faster by " << (duration1.count() / duration2.count()) * 1000 << " ms \n";
  195.             }
  196.             else
  197.             {
  198.                 cout << "The algorithm was faster by " << abs((duration1.count() / duration2.count())) * 1000 << " ms \n";
  199.             }
  200.         }
  201.  
  202.        
  203.  
  204.         vec1.clear(); //удаляем векторы
  205.         vec2.clear();
  206.  
  207.         cout << "\n Do you want to repeat (y/n)>> ";
  208.         cin >> answ;
  209.         while (cin.fail() || cin.peek() != '\n' && answ != 'n' && answ != 'N' && answ != 'Y' && answ != 'y')
  210.         {
  211.             cin.clear();
  212.             cin.ignore(10000, '\n');
  213.             cout << "Error, invalid parameters \n";
  214.             cout << "\n Do you want to repeat (y/n)>> ";
  215.             cin >> answ;
  216.         }
  217.     } while ((answ == 'y') || (answ == 'Y'));
  218.     return 0;
  219. }
  220.  
  221.  
Advertisement
Add Comment
Please, Sign In to add comment