O_Egor

Sortirovka v2!!! (6 баллов)

Dec 22nd, 2019 (edited)
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.94 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.  
  12. using namespace std;
  13.  
  14. int ks, kd;
  15. int arr1[10000];
  16. int arr[10000];
  17.  
  18. void printArray(int arr[], int n)
  19. {
  20.     for (int i = 0; i < n; ++i)
  21.         cout << arr[i] << " ";
  22.     cout << "\n";
  23. }
  24.  
  25. void build(int arr[], int n, int i)
  26. {
  27.     int root = i, l = 2 * i + 1, r = 2 * i + 2;
  28.     if (l < n && arr[root] < arr[l])
  29.     {
  30.         root = l;
  31.         ks++;
  32.     }
  33.     if (arr[root] < arr[r] && r < n)
  34.     {
  35.         root = r;
  36.         ks++;
  37.     }
  38.     if (root != i)
  39.     {
  40.         swap(arr[root], arr[i]);
  41.         kd++;
  42.         build(arr, n, root);
  43.     }
  44. }
  45.  
  46. void heapSort(int arr[], int n)
  47. {
  48.     for (int i = n / 2 - 1; i >= 0; --i)
  49.     {
  50.         build(arr, n, i);
  51.     }
  52.     for (int i = n - 1; i >= 0; i--)
  53.     {
  54.         swap(arr[0], arr[i]);
  55.         build(arr, i, 0);
  56.     }
  57.     cout << "Результат: ";
  58.     printArray(arr, n);
  59. }
  60.  
  61. void qsort(int arr1[], int b, int e, int n)
  62. {
  63.     int l = b, r = e, piv = arr1[(l + r) / 2];
  64.     while (l <= r)
  65.     {
  66.         while (arr1[l] < piv)
  67.         {
  68.             ks++;
  69.             l++;
  70.         }
  71.         while (arr1[r] > piv)
  72.         {
  73.             ks++;
  74.             r--;
  75.         }
  76.         if (l <= r)
  77.         {
  78.             kd++;
  79.             swap(arr1[l++], arr1[r--]);
  80.         }
  81.     }
  82.     if (b < r)
  83.         qsort(arr1, b, r, n);
  84.     if (e > l)
  85.         qsort(arr1, l, e, n);
  86. }
  87.  
  88. int main()
  89. {
  90.     setlocale(LC_ALL, "Russian");
  91.     cout << "Введите размер массива: ";
  92.     int n;
  93.     cin >> n;
  94.  
  95.     srand(time(NULL));
  96.     for (int i = 0; i < n; ++i)
  97.     {
  98.         arr[i] = rand() % 100;
  99.         arr1[i] = arr[i];
  100.     }
  101.     printArray(arr, n);
  102.  
  103.     int ans;
  104.     cout << "Выберите метод сортировки: \n(1) Пирамидальная\n(2) Быстрая\n";
  105.     cin >> ans;
  106.     while (ans)
  107.     {
  108.         switch (ans)
  109.         {
  110.         case 1:
  111.             cout << "Исходный массив: ";
  112.             printArray(arr, n);
  113.             ks = 0;
  114.             kd = 0;
  115.             heapSort(arr, n);
  116.             cout << "Количество сравнений: " << ks << ", Количество действий: " << kd << '\n'; break;
  117.         case 2:
  118.             cout << "Исходный массив: ";
  119.             printArray(arr1, n);
  120.             ks = 0;
  121.             kd = 0;
  122.             qsort(arr1, 0, n - 1, n);
  123.             cout << "Результат: ";
  124.             printArray(arr1, n);
  125.             cout << "Количество сравнений: " << ks << ", Количество действий: " << kd << '\n';
  126.         }
  127.         cout << "\nВыберите метод сортировки: \n(0) Закончить\n(1) Пирамидальная\n(2) Быстрая\n";
  128.         cin >> ans;
  129.     }
  130.     return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment