Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.12 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void init(int* a, int n) {
  6.     for (int i = 0; i < n; ++i)
  7.         a[i] = rand() % n;
  8. }
  9.  
  10. void print(int* a, int n) {
  11.     int i;
  12.     for (i = 0; i < n - 1; ++i)
  13.         cout << a[i] << " ";
  14.     cout << a[i] << endl;
  15. }
  16.  
  17. void swap(int& a, int& b) {
  18.     a += b;
  19.     b = a - b;
  20.     a -= b;
  21. }
  22.  
  23. // 45. Метод поиска с обменом (сортировка посредством выбора)
  24. // Пространственная сложность – О(N)
  25. // Кол-во сравнений – О(N^2)
  26. // Кол-во пересылок – О(N)
  27. void sort_choice(int* a, int n) {
  28.     for (int i = 0; i < n; ++i) {
  29.         int min = a[i], k = i;
  30.         for (int j = i; j < n; ++j)
  31.             if (a[j] < min) {
  32.                 min = a[j];
  33.                 k = j;
  34.             }
  35.         a[k] = a[i];
  36.         a[i] = min;
  37.     }
  38. }
  39.  
  40. // 46. Алгоритм «Пузырька»
  41. // Пространственная сложность – О(N)
  42. // Кол-во сравнений и пересылок – О(N^2)
  43. void sort_bubble(int* a, int n) {
  44.     for (int i = 0; i < n; ++i)
  45.         for (int j = 0; j < i - 1; ++j)
  46.             if (a[j] > a[j + 1])
  47.                 swap(a[j], a[j + 1]);
  48. }
  49.  
  50. // 47. Челночная сортировка (сортировка вставками)
  51. // Пространственная сложность – О(N)
  52. // Кол-во сравнений и пересылок – О(N^2)
  53. void sort_shake(int* a, int n) {
  54.     for (int i = 0; i < n - 1; ++i)
  55.         if (a[i] > a[i + 1]) {
  56.             swap(a[i], a[i + 1]);
  57.         for (int k = i; a[k] < a[k - 1] && k >= 1; --k)
  58.             swap(a[k], a[k - 1]);
  59.     }
  60. }
  61.  
  62. // 48. Метод подсчета
  63. // Пространственная сложность – О(N)
  64. // Кол-во сравнений – О(N^2)
  65. // Кол-во пересылок – О(N)
  66. void sort_count(int* a, int n) {
  67.     int* b = new int[n];
  68.     for (int i = 0; i < n; ++i)
  69.         b[i] = 0;
  70.     for (int i = 0; i < n; ++i)
  71.         for (int j = i + 1; j < n; ++j)
  72.             if (a[i] > a[j])
  73.                 ++b[i];
  74.             else
  75.                 ++b[j];
  76.     int* c = new int[n];
  77.     for (int i = 0; i < n; ++i)
  78.         c[b[i]] = a[i];
  79.     for (int i = 0; i < n; ++i)
  80.         a[i] = c[i];
  81.     delete[] c;
  82.     delete[] b;
  83. }
  84.  
  85.  
  86. // 49. Метод парных сравнений
  87. // Пространственная сложность – О(N)
  88. // Кол-во сравнений и пересылок – О(N^2)
  89. void sort_pair(int* a, int n) {
  90.     bool flag1 = true, flag2 = true;
  91.     while (flag1 && flag2) {
  92.         flag1 = false;
  93.         for (int i = 0; i < n - 1; i += 2)
  94.             if (a[i] > a[i + 1]) {
  95.                 swap(a[i], a[i + 1]);
  96.                 flag1 = true;
  97.             }
  98.         flag2 = false;
  99.         for (int i = 1; i < n - 1; i += 2)
  100.             if (a[i] > a[i + 1]) {
  101.                 swap(a[i], a[i + 1]);
  102.                 flag2 = true;
  103.             }
  104.     }
  105. }
  106.  
  107. // 50. Быстрая сортировка
  108. // Временная сложность – О(N*logN)
  109. void hoar_sort(int* a, int left, int right) {
  110.     int i = left, j = right;
  111.     int f = a[left + rand() % (right - left + 1)];
  112.     do {
  113.         while (a[i] < f)
  114.             ++i;
  115.         while (a[j] > f)
  116.             --j;
  117.         if (i <= j) {
  118.             if (i < j)
  119.                 swap(a[i], a[j]);
  120.             ++i;
  121.             --j;
  122.         }
  123.     } while (i <= j);
  124.     if (left < j)
  125.         hoar_sort(a, left, j);
  126.     if (right > i)
  127.         hoar_sort(a, i, right);
  128. }
  129.  
  130. int main() {
  131.     setlocale(LC_ALL, "rus");
  132.  
  133.     int n;
  134.     cout << "n = ";
  135.     cin >> n;
  136.     cout << endl;
  137.     int* a = new int[n];
  138.  
  139.     init(a, n);
  140.     print(a, n);
  141.     sort_choice(a, n); // 45. Метод поиска с обменом (сортировка посредством выбора)
  142.     print(a, n);
  143.     cout << endl;
  144.  
  145.     init(a, n);
  146.     print(a, n);
  147.     sort_bubble(a, n); // 46. Алгоритм «Пузырька»
  148.     print(a, n);
  149.     cout << endl;
  150.  
  151.     init(a, n);
  152.     print(a, n);
  153.     sort_shake(a, n); // 47. Челночная сортировка (сортировка вставками)
  154.     print(a, n);
  155.     cout << endl;
  156.  
  157.     init(a, n);
  158.     print(a, n);
  159.     sort_count(a, n); // 48. Метод подсчета
  160.     print(a, n);
  161.     cout << endl;
  162.  
  163.     init(a, n);
  164.     print(a, n);
  165.     sort_pair(a, n); // 49. Метод парных сравнений
  166.     print(a, n);
  167.     cout << endl;
  168.  
  169.     init(a, n);
  170.     print(a, n);
  171.     hoar_sort(a, 0, n - 1); // 50. Быстрая сортировка
  172.     print(a, n);
  173.     cout << endl;
  174.  
  175.     delete[] a;
  176.     system("pause");
  177.     return 0;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement