Advertisement
StoneHaos

mod2

Nov 7th, 2021
1,239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <vector>
  7.  
  8. using namespace std;
  9.  
  10. void print(vector<int> arr) {
  11.     for (int i = 0; i < arr.size(); ++i) {
  12.         printf("%d ", arr[i]);
  13.     }
  14.     printf("\n");
  15. }
  16.  
  17. //Линейный поиск с барьером
  18. int LinS(vector<int> arr, int elem) {
  19.     arr.push_back(elem);
  20.     int i = 0;
  21.     while (arr[i] != elem) ++i;
  22.     arr.pop_back();
  23.     if (i == arr.size())
  24.         return -1;
  25.     else
  26.         return i;
  27. }
  28.  
  29. //Бинарный поиск
  30. int BinS(vector<int> arr, int elem) {
  31.     int l = 0;
  32.     int r = arr.size();
  33.     while (r - l > 1) {
  34.         int m = (r + l) / 2;
  35.         if (elem < arr[m])
  36.             r = m;
  37.         else
  38.             l = m;
  39.     }
  40.     if (arr[l] == elem) return l;
  41.     else return -1;
  42. }
  43.  
  44. //Восстановление свойств кучи в поддереве (для пирамидальной сортировки)
  45. void Heapify(vector<int> &arr, int len, int i) {
  46.     int l = 2 * i + 1;
  47.     int r = 2 * i + 2;
  48.     int m = i;
  49.     if (l < len && arr[l] > arr[m])
  50.         m = l;
  51.     if (r < len && arr[r] > arr[m])
  52.         m = r;
  53.     if (m != i) {
  54.         swap(arr[i], arr[m]);
  55.         Heapify(arr, len, m);
  56.     }
  57. }
  58.  
  59. //Пирамидальная сортировка
  60. void Pyramid(vector<int> &arr) {
  61.     //Построение кучи
  62.     for (int i = arr.size() - 1; i >= 0; --i)
  63.         Heapify(arr, arr.size(), i);
  64.     //Сортировка
  65.     int cnt = arr.size() - 1;
  66.     for (; cnt > 0; --cnt) {
  67.         swap(arr[0], arr[cnt]);
  68.         Heapify(arr, cnt, 0);
  69.     }
  70. }
  71.  
  72. int main() {
  73.     setlocale(LC_ALL, "Russian");
  74.     srand(time(NULL));
  75.  
  76.     int n;
  77.     cout << "Введите длину массива>";
  78.     cin >> n;
  79.     vector<int> arr;
  80.     for (int i = 0; i < n; ++i) {
  81.         arr.push_back(rand() % 100);
  82.     }
  83.     cout << "Исходный массив:\n";
  84.     print(arr);
  85.     Pyramid(arr);
  86.     cout << "Отсортированный массив:\n";
  87.     print(arr);
  88.     int e;
  89.     cout << "Введите элемент, который хотите найти>";
  90.     cin >> e;
  91.     cout << "Линейный поиск с барьером: " << LinS(arr, e) << endl;
  92.     cout << "Бинарный поиск: " << BinS(arr, e) << endl;
  93.     return 0;
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement