Advertisement
myloyo

сорт 2 по главной диагонали

Apr 13th, 2023 (edited)
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6. int partition(int a[], int start, int end)
  7. {
  8.     int pivot = a[end];
  9.     int pIndex = start;
  10.     for (int i = start; i < end; i++)
  11.     {
  12.         if (a[i] <= pivot)
  13.         {
  14.             swap(a[i], a[pIndex]);
  15.             pIndex++;
  16.         }
  17.     }
  18.     swap(a[pIndex], a[end]);
  19.     return pIndex;
  20. }
  21.  
  22. void quicksort(int a[], int start, int end)
  23. {
  24.     if (start >= end) {
  25.         return;
  26.     }
  27.     int pivot = partition(a, start, end);
  28.     quicksort(a, start, pivot - 1);
  29.     quicksort(a, pivot + 1, end);
  30. }
  31.  
  32. void heapify(int arr[], int n, int i)
  33. {
  34.     int largest = i;
  35.    
  36.     int l = 2 * i + 1;
  37.     int r = 2 * i + 2;
  38.  
  39.    
  40.     if (l < n && arr[l] > arr[largest])
  41.         largest = l;
  42.     if (r < n && arr[r] > arr[largest])
  43.         largest = r;
  44.  
  45.     if (largest != i)
  46.     {
  47.         swap(arr[i], arr[largest]);
  48.         heapify(arr, n, largest);
  49.     }
  50. }
  51.  
  52. void heapSort(int arr[], int n)
  53. {
  54.     for (int i = n / 2 - 1; i >= 0; i--)
  55.         heapify(arr, n, i);
  56.  
  57.     for (int i = n - 1; i >= 0; i--)
  58.     {
  59.         swap(arr[0], arr[i]);
  60.         heapify(arr, i, 0);
  61.     }
  62. }
  63.  
  64. int main() {
  65.     int n;
  66.     cin >> n;
  67.     int** a = new int* [n];
  68.     for (int i = 0; i < n; i++) {
  69.         a[i] = new int[n];
  70.     }
  71.     for (int i = 0; i < n; i++) {
  72.         for (int j = 0; j < n; j++) {
  73.             cin >> a[i][j];
  74.         }
  75.     }
  76.     int* t = new int[n];
  77.     int c = 1;
  78.     int i = 0;
  79.     int j = 1;
  80.     while (c <= n) {
  81.         while (i < n - 1 && j < n) {
  82.             t[i] = a[i][j];
  83.             i++; j++;
  84.         }
  85.         heapSort(t, i); //сортируем
  86.         //quicksort(t, 0, i-1); // сортируем
  87.         i = 0;
  88.         j = c;
  89.         while (i < n - 1 && j < n) { // вставка отсортированного обратно
  90.             a[i][j] = t[i];
  91.             i++; j++;
  92.         }
  93.         for (int k = 0; k < i; k++) { // обнуление временного массива
  94.             t[k] = 0;
  95.         }
  96.         i = 0;
  97.         c++;
  98.         j = c;
  99.     }
  100.  
  101.     int u = 3;
  102.     int k = 4;
  103.     int m = 3;
  104.     int g = 0;
  105.     while (u != -1) {
  106.         while (m != -1) {
  107.             t[g] = a[k][m];
  108.             k--; m--;
  109.             g++;
  110.         }
  111.         heapSort(t, g); //сортируем
  112.         //quicksort(t, 0, g-1); // сортируем
  113.         k = 4;
  114.         m = u;
  115.         g = 0;
  116.         while (m != -1) {
  117.             a[k][m] = t[g];
  118.             k--; m--;
  119.             g++;
  120.         }
  121.         for (int l = 0; l < g; l++) {
  122.             t[l] = 0;
  123.         }
  124.         g = 0;
  125.         k = 4;
  126.         u--;
  127.         m = u;
  128.     }
  129.  
  130.     for (int i = 0; i < n; i++) {
  131.         for (int j = 0; j < n; j++) {
  132.             cout << a[i][j] << " ";
  133.         }
  134.         cout << endl;
  135.     }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement