Advertisement
Leeen

Lab for Bezus №3 var 12

Oct 29th, 2018
457
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.96 KB | None | 0 0
  1. // Лабораторная для Безуса №3 вариант 12
  2.  
  3. #include<iostream>
  4. #include<vector>
  5. #include<string>
  6. #include<ctime>
  7. #include<algorithm>
  8.  
  9. using namespace std;
  10.  
  11. // Рандомно получаем и заполняем вектор
  12. vector<int> getRandomVec(int sizeOfVector, int x)
  13. {
  14.     vector<int> vec;
  15.  
  16.     //Наполняем вектор абсолютно рандомно
  17.     if (x == 0)
  18.         for (int i = 0; i < sizeOfVector; i++)
  19.         {
  20.             vec.push_back(rand());
  21.         }
  22.  
  23.     //Наполняем вектор с интервалом в x
  24.     else for (int i = 0; i < sizeOfVector; i++)
  25.     {
  26.         vec.push_back(rand() % x);
  27.     }
  28.     return vec;
  29. }
  30.  
  31. // Делаем копию вектора
  32. vector<int> getRandomVecCustomSort(vector<int> getRandomVec)
  33. {
  34.     vector<int> vecCustomSort;
  35.     int sizeOfVector = getRandomVec.size();
  36.    
  37.         for (int i = 0; i < sizeOfVector; i++)
  38.         {
  39.             getRandomVec.push_back(rand());
  40.             vecCustomSort.push_back(getRandomVec[i]);
  41.         }
  42.         return vecCustomSort;
  43. }
  44.  
  45. // Печатает вектор длиной 10 первых символов, даже если вектор больше
  46. void printVector(vector<int> vec)
  47. {
  48.     // Если длина вектора не более 10
  49.     if (vec.size() <= 9)
  50.         for (int i = 0; i < vec.size(); i++)
  51.         {
  52.             cout << vec[i] << ' ';
  53.         }
  54.     // Если длина вектора больше 10
  55.     else for (int i = 0; i < 9; i++)
  56.     {
  57.         cout << vec[i] << ' ';
  58.     }
  59.  
  60.     cout << endl;
  61. }
  62.  
  63. // Ввод чисел в вектор
  64. vector<int> inputVector(int sizeOfVector, int x)
  65. {
  66.     vector<int> vec;
  67.     int number;
  68.     for (int i = 0; i < sizeOfVector; i++) {
  69.         cout << "Input " << i + 1 << " element of array: ";
  70.         cin >> number;
  71.         vec.push_back(number);
  72.     }
  73.     return vec;
  74. }
  75.  
  76. // Проверка на ввод согласия
  77. int checkYesNo(string yn) {
  78.     if (yn == "Yes" || yn == "YES" || yn == "yes" || yn == "y" ) return 1;
  79.     else if (yn == "No" || yn == "NO" || yn == "no" || yn == "n") return 2;
  80.     else return 0;
  81. }
  82.  
  83. //Согласно выбранному пути, заполняем вектор рандомными значениями или вводимыми пользователем
  84. vector<int> setChoice(string yn, int x, int sizeOfVector)
  85. {
  86.     vector<int> vec;
  87.  
  88.     //Если мы согласны получить рандомный вектор
  89.     if (checkYesNo(yn) == 1)
  90.     {
  91.         vec = getRandomVec(sizeOfVector, x);
  92.         printVector(vec);
  93.     }
  94.  
  95.     //Если мы хотим заполнить ветор сами
  96.     else if (checkYesNo(yn) == 2)
  97.     {
  98.         vec = inputVector(sizeOfVector, x);
  99.         printVector(vec);
  100.         cout << endl;
  101.     }
  102.     return vec;
  103. }
  104.  
  105. // Сортировка Шелла
  106. vector<int> ShellSort(vector<int> vec)
  107. {
  108.     unsigned i, j, d; // не отрицательные значения
  109.     int t;
  110.     for (d = vec.size() / 2; d > 0; d /= 2)
  111.         for (i = d; i < vec.size(); i++)
  112.         {
  113.             t = vec[i];
  114.             for (j = i; j >= d; j -= d)
  115.             {
  116.                 if (t < vec[j - d])
  117.                     vec[j] = vec[j - d];
  118.                 else
  119.                     break;
  120.             }
  121.             vec[j] = t;
  122.         }
  123.     return vec;
  124. }
  125.  
  126.  
  127.  
  128. int main()
  129. {
  130.  
  131.     vector<int> vec;
  132.     vector<int> vecCustomSort;
  133.  
  134.     cout << "Hi, lets sort vector" << endl;
  135.  
  136.     string yn;
  137.  
  138.     cout << "Do you want get random vector? [Yes/No]" << endl;
  139.  
  140.     // Пока мы вводим неправильно Yes/No, программа выкидывает ошибку и просит повторить
  141.     do
  142.     {
  143.         getline(cin, yn);
  144.         if (checkYesNo(yn) == 0)
  145.             cout << "Error! Try again" << endl << "Do you want get random vector? [Yes/No]" << endl;
  146.     } while (checkYesNo(yn) == 0);
  147.  
  148.     cout << "Enter the number of variables in the vector: ";
  149.     int sizeOfVector;
  150.     cin >> sizeOfVector;
  151.  
  152.     int x = 0;
  153.  
  154.     // Если мы хотим создать рандомный массив, то введем число уникальных чисел
  155.     if (checkYesNo(yn) == 1)
  156.     {
  157.         cout << "Enter the number of unique integers (0 if you do not need it)" << endl;
  158.         cin >> x;
  159.     }
  160.     vec = setChoice(yn, x, sizeOfVector);
  161.  
  162.     double timeOfShellSort = clock();
  163.     vecCustomSort = ShellSort(vec);
  164.     timeOfShellSort = (clock() - timeOfShellSort) / CLOCKS_PER_SEC;
  165.  
  166.     cout << "Sorted by Shell's function:" << endl;
  167.     printVector(vecCustomSort);
  168.     cout << "Vector is sorted by Shell's function in " << timeOfShellSort << " sec" << endl;
  169.  
  170.     // Получим текущее время
  171.     double timeLib = clock();
  172.  
  173.     // Сортируем массив
  174.     sort(vec.begin(), vec.end());
  175.  
  176.     // Получим интервал времени, за который выполнится библиотечная сортировка
  177.     timeLib = (clock() - timeLib) / CLOCKS_PER_SEC;
  178.  
  179.     cout << "Sorted vector by library function:" << endl;
  180.     printVector(vec);
  181.     cout << "Vector is sorted by library function in " << timeLib << " sec" << endl;
  182.  
  183.     double timeDifference = timeOfShellSort - timeLib;
  184.     cout << "Вifference between sorting Shell's function and library function is " << timeDifference << " sec" << endl;
  185.  
  186.     system("pause");
  187.  
  188.     return 0;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement