Advertisement
Lavig

Другий семестр. Лабораторна робота №19 (заголовний файл)

Jun 1st, 2025
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #ifndef SORT_ALGORITHMS_H
  2. #define SORT_ALGORITHMS_H
  3.  
  4. #include <vector>
  5. #include <algorithm>
  6.  
  7. // QUICK SORT
  8. int partition(std::vector<int>& arr, int low, int high) {
  9.     int pivot = arr[high];
  10.     int i = low - 1;
  11.     for (int j = low; j < high; j++) {
  12.         if (arr[j] < pivot) {
  13.             i++;
  14.             std::swap(arr[i], arr[j]);
  15.         }
  16.     }
  17.     std::swap(arr[i + 1], arr[high]);
  18.     return i + 1;
  19. }
  20.  
  21. void quickSort(std::vector<int>& arr, int low, int high) {
  22.     if (low < high) {
  23.         int pi = partition(arr, low, high);
  24.         quickSort(arr, low, pi - 1);
  25.         quickSort(arr, pi + 1, high);
  26.     }
  27. }
  28.  
  29. // MERGE SORT
  30. void merge(std::vector<int>& arr, int left, int mid, int right) {
  31.     std::vector<int> leftPart(arr.begin() + left, arr.begin() + mid + 1);
  32.     std::vector<int> rightPart(arr.begin() + mid + 1, arr.begin() + right + 1);
  33.  
  34.     int i = 0, j = 0, k = left;
  35.     while (i < leftPart.size() && j < rightPart.size()) {
  36.         if (leftPart[i] <= rightPart[j]) {
  37.             arr[k++] = leftPart[i++];
  38.         }
  39.         else {
  40.             arr[k++] = rightPart[j++];
  41.         }
  42.     }
  43.     while (i < leftPart.size()) arr[k++] = leftPart[i++];
  44.     while (j < rightPart.size()) arr[k++] = rightPart[j++];
  45. }
  46.  
  47. void mergeSort(std::vector<int>& arr, int left, int right) {
  48.     if (left < right) {
  49.         int mid = (left + right) / 2;
  50.         mergeSort(arr, left, mid);
  51.         mergeSort(arr, mid + 1, right);
  52.         merge(arr, left, mid, right);
  53.     }
  54. }
  55.  
  56. // BUBBLE SORT
  57. void bubbleSort(std::vector<int>& arr, int low, int high) {
  58.     for (int i = low; i < high; ++i) {
  59.         for (int j = low; j < high - (i - low) - 1; ++j) {
  60.             if (arr[j] > arr[j + 1]) {
  61.                 std::swap(arr[j], arr[j + 1]);
  62.             }
  63.         }
  64.     }
  65. }
  66.  
  67. // INSERTION SORT
  68. void insertionSort(std::vector<int>& arr, int low, int high) {
  69.     for (int i = low + 1; i <= high; ++i) {
  70.         int key = arr[i];
  71.         int j = i - 1;
  72.         while (j >= low && arr[j] > key) {
  73.             arr[j + 1] = arr[j];
  74.             j--;
  75.         }
  76.         arr[j + 1] = key;
  77.     }
  78. }
  79.  
  80. // SELECTION SORT
  81. void selectionSort(std::vector<int>& arr, int low, int high) {
  82.     for (int i = low; i < high; ++i) {
  83.         int minIndex = i;
  84.         for (int j = i + 1; j <= high; ++j) {
  85.             if (arr[j] < arr[minIndex]) {
  86.                 minIndex = j;
  87.             }
  88.         }
  89.         std::swap(arr[i], arr[minIndex]);
  90.     }
  91. }
  92.  
  93. #endif // SORT_ALGORITHMS_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement