Advertisement
O_Egor

Sortirovka!!! (4 балла)

Dec 15th, 2019 (edited)
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.60 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <string>
  6. #include <set>
  7. #include <map>
  8. #include <iomanip>
  9. #include <time.h>
  10. #include <stdlib.h>
  11. using namespace std;
  12.  
  13. //Задача: реализовать сортировки: 1) вставкой, 2) бинарной вставкой, 3)Шелла; и посчитать количество сравнений
  14. //и количество действий для каждой сортировки
  15.  
  16. int ks = 0, kd = 0;
  17.  
  18. void sortvst(vector <int> vv, int sz)
  19. {
  20.     cout << "Start array: ";
  21.     for (int i = 0; i < sz; ++i)
  22.         cout << vv[i] << ' ';
  23.     cout << '\n';
  24.     ks = 0; kd = 0;
  25.     for (int i = 1; i < sz; ++i)
  26.     {
  27.         int zn = vv[i], j = i - 1;
  28.         while (j >= 0 && zn < vv[j])
  29.         {
  30.             ks++;
  31.             vv[j + 1] = vv[j];
  32.             kd++;
  33.             j--;
  34.         }
  35.         vv[j + 1] = zn;
  36.         kd++;
  37.     }
  38.     cout << "Result: ";
  39.     for (int i = 0; i < sz; ++i)
  40.         cout << vv[i] << ' ';
  41.     cout << "\nSravnenii : " << ks << "\nDeistvii : " << kd << "\n\n";
  42. }
  43.  
  44. void binsortvst(vector <int> vv, int sz)
  45. {
  46.     cout << "Start array: ";
  47.     for (int i = 0; i < sz; ++i)
  48.         cout << vv[i] << ' ';
  49.     cout << '\n';
  50.     ks = 0; kd = 0;
  51.     for (int i = 1; i < sz; ++i)
  52.     {
  53.  
  54.         if (vv[i - 1] > vv[i])
  55.         {
  56.             int zn = vv[i];
  57.             int r(i - 1), l(0);
  58.             while (l <= r)
  59.             {
  60.                 ks++;
  61.                 int mid = (l + r) / 2;
  62.                 kd++;
  63.                 if (vv[mid] > zn)
  64.                     r = mid - 1;
  65.                 else
  66.                     l = mid + 1;
  67.                 kd++;
  68.             }
  69.             for (int j = i - 1; j >= l; --j)
  70.             {
  71.                 vv[j + 1] = vv[j];
  72.                 kd++;
  73.             }
  74.             vv[l] = zn;
  75.             kd++;
  76.         }
  77.     }
  78.     cout << "Result: ";
  79.     for (int i = 0; i < sz; ++i)
  80.         cout << vv[i] << ' ';
  81.     cout << "\nSravnenii : " << ks << "\nDeistvii : " << kd << "\n\n";
  82. }
  83.  
  84. void Shell(vector <int> vv, int sz)
  85. {
  86.     ks = 0; kd = 0;
  87.     cout << "Start array: ";
  88.     for (int i = 0; i < sz; ++i)
  89.         cout << vv[i] << ' ';
  90.     cout << '\n';
  91.     int d = sz / 3 + 1;
  92.     while (true)
  93.     {
  94.         for (int i = d; i < sz; i++)
  95.         {
  96.             int key = vv[i];
  97.             int j = i - d;
  98.             while (j >= 0 && vv[j] > key)
  99.             {
  100.                 ks++;
  101.                 vv[j + d] = vv[j];
  102.                 kd++;
  103.                 j -= d;
  104.             }
  105.             vv[j + d] = key;
  106.             kd++;
  107.         }
  108.         if (d == 1)
  109.             break;
  110.         d = d / 3 + 1;
  111.     }
  112.     cout << "Result: ";
  113.     for (int i = 0; i < sz; ++i)
  114.         cout << vv[i] << ' ';
  115.     cout << "\nSravnenii : " << ks << "\nDeistvii : " << kd << "\n\n";
  116. }
  117.  
  118. int main()
  119. {
  120.     setlocale(LC_ALL, "Russian");
  121.     int sz;
  122.     cout << "Input size of array: ";
  123.     cin >> sz;
  124.     vector <int> v(sz);
  125.     srand(time(NULL));
  126.     for (int i = 0; i < sz; ++i)
  127.     {
  128.         v[i] = rand() % 100;
  129.         cout << v[i] << ' ';
  130.     }
  131.     int ans;
  132.     cout << "\nSelect type of sort:\n\t(1) Vstavkoi\n\t(2)Binarnoi vstavkoi\n\t(3)Shella\n";
  133.     cin >> ans;
  134.     while (ans)
  135.     {
  136.         switch (ans)
  137.         {
  138.         case 1: sortvst(v, sz); break;
  139.         case 2: binsortvst(v, sz); break;
  140.         case 3: Shell(v, sz);
  141.         }
  142.         cout << "Select type of sort again(if you need):\n\t(0)Exit\n\t(1) Vstavkoi\n\t(2)Binarnoi vstavkoi\n\t(3)Shella\n";
  143.         cin >> ans;
  144.     }
  145.     return 0;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement