Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <string>
- #include <set>
- #include <map>
- #include <iomanip>
- #include <time.h>
- #include <stdlib.h>
- using namespace std;
- int ks, kd;
- int arr1[10000];
- int arr[10000];
- void printArray(int arr[], int n)
- {
- for (int i = 0; i < n; ++i)
- cout << arr[i] << " ";
- cout << "\n";
- }
- void build(int arr[], int n, int i)
- {
- int root = i, l = 2 * i + 1, r = 2 * i + 2;
- if (l < n && arr[root] < arr[l])
- {
- root = l;
- ks++;
- }
- if (arr[root] < arr[r] && r < n)
- {
- root = r;
- ks++;
- }
- if (root != i)
- {
- swap(arr[root], arr[i]);
- kd++;
- build(arr, n, root);
- }
- }
- void heapSort(int arr[], int n)
- {
- for (int i = n / 2 - 1; i >= 0; --i)
- {
- build(arr, n, i);
- }
- for (int i = n - 1; i >= 0; i--)
- {
- swap(arr[0], arr[i]);
- build(arr, i, 0);
- }
- cout << "Результат: ";
- printArray(arr, n);
- }
- void qsort(int arr1[], int b, int e, int n)
- {
- int l = b, r = e, piv = arr1[(l + r) / 2];
- while (l <= r)
- {
- while (arr1[l] < piv)
- {
- ks++;
- l++;
- }
- while (arr1[r] > piv)
- {
- ks++;
- r--;
- }
- if (l <= r)
- {
- kd++;
- swap(arr1[l++], arr1[r--]);
- }
- }
- if (b < r)
- qsort(arr1, b, r, n);
- if (e > l)
- qsort(arr1, l, e, n);
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- cout << "Введите размер массива: ";
- int n;
- cin >> n;
- srand(time(NULL));
- for (int i = 0; i < n; ++i)
- {
- arr[i] = rand() % 100;
- arr1[i] = arr[i];
- }
- printArray(arr, n);
- int ans;
- cout << "Выберите метод сортировки: \n(1) Пирамидальная\n(2) Быстрая\n";
- cin >> ans;
- while (ans)
- {
- switch (ans)
- {
- case 1:
- cout << "Исходный массив: ";
- printArray(arr, n);
- ks = 0;
- kd = 0;
- heapSort(arr, n);
- cout << "Количество сравнений: " << ks << ", Количество действий: " << kd << '\n'; break;
- case 2:
- cout << "Исходный массив: ";
- printArray(arr1, n);
- ks = 0;
- kd = 0;
- qsort(arr1, 0, n - 1, n);
- cout << "Результат: ";
- printArray(arr1, n);
- cout << "Количество сравнений: " << ks << ", Количество действий: " << kd << '\n';
- }
- cout << "\nВыберите метод сортировки: \n(0) Закончить\n(1) Пирамидальная\n(2) Быстрая\n";
- cin >> ans;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment