kokokozhina

matrixsort_12

Feb 18th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. #include <iostream>//bug
  2. #include <fstream>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iomanip>
  6. //В файле содержится двумерный массив размерностью 𝑛 × 𝑛. В новый файл вывести отсортированный массив
  7. using namespace std;
  8. //Диагонали, параллельные главной по возрастанию с помощью пирамидальной сортировки.
  9.  
  10. void downHeap(int a[], long k, long n) {
  11.   //  процедура просеивания следующего элемента
  12.   //  До процедуры: a[k+1]...a[n]  - пирамида
  13.   //  После:  a[k]...a[n]  - пирамида
  14.   int new_elem;
  15.   long child;
  16.   new_elem = a[k];
  17.  
  18.   while(k <= n/2) {         // пока у a[k] есть дети
  19.     child = 2*k;
  20.     //  выбираем большего сына
  21.     if( child < n && a[child] < a[child+1] )
  22.     child++;
  23.     if( new_elem >= a[child] ) break;
  24.     // иначе
  25.     a[k] = a[child];    // переносим сына наверх
  26.     k = child;
  27.   }
  28.   a[k] = new_elem;
  29. }
  30.  
  31. void heapSort(T a[], long size) {
  32.   long i;
  33.   T temp;
  34.  
  35.   // строим пирамиду
  36.   for(i=size/2-1; i >= 0; i--) downHeap(a, i, size-1);
  37.  
  38.   // теперь a[0]...a[size-1] пирамида
  39.  
  40.   for(i=size-1; i > 0; i--) {
  41.     // меняем первый с последним
  42.     temp=a[i]; a[i]=a[0]; a[0]=temp;
  43.  
  44.     // восстанавливаем пирамидальность a[0]...a[i-1]
  45.     downHeap(a, 0, i-1);
  46.   }
  47. }
  48.  
  49. int main()
  50. {
  51.     ifstream in("in.txt");
  52.     ofstream out("out.txt");
  53.    
  54.     int n;
  55.     cout << "Enter array's dimension: ";
  56.     cin >> n;
  57.     int** a = new int*[n];
  58.     for(int i = 0; i < n; i++)
  59.     {
  60.         a[i] = new int[n];
  61.         for(int j = 0; j < n; j++)
  62.         {
  63.             in >> a[i][j];
  64.         }
  65.     }
  66.  
  67.     for(int i = 0; i < n; i++)
  68.     {
  69.         //shell(a, n, i);
  70.     }
  71.  
  72.     for(int i = 0; i < n; i++, out << endl)
  73.     {
  74.         for(int j = 0; j < n; j++)
  75.         {
  76.             out << a[i][j] << " ";
  77.         }
  78.     }
  79. }
Add Comment
Please, Sign In to add comment