Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. //Методы сортировки
  2. //Массивы динамические двумерные
  3. //Сортировка элементов всех строк двумерного массива целых чисел
  4. //по убыванию
  5.  
  6. #include<iostream>
  7. #include <locale.h>
  8. using namespace std;
  9.  
  10. typedef int telem ; //определение типа элементов массива
  11. typedef telem *tstr ; //определение типа "указатель на telem"
  12. typedef tstr *tmatr; //определение типа "указатель на указатель на telem"
  13. void i_matr(tmatr, int);
  14. void o_matr(tmatr, int);
  15. void sort_obmenF(tmatr, int) ;
  16.  
  17. int main()
  18. { int i, j ;
  19. int n ; // половина числа строк матрицы и столбцов матрицы
  20. tmatr a; //объявляется переменная-указатель на указатель на telem
  21. setlocale(LC_ALL,"Russian") ;
  22. cout << "\nВведите количество строк и столбцов матрицы: " ;
  23. cin >> n;
  24. a = new tstr [2*n] ; //выделение динамической памяти под массив
  25. //указателей на строки массива
  26. for(i = 0; i < 2*n; i++) //цикл выделения памяти под каждую строку
  27. *(a + i) = new telem [2*n] ;//каждому элементу массива указателей
  28. //на строки присваивается адрес начала
  29. //области памяти, выделяемой под строку
  30. i_matr(a, n) ;
  31. cout << "Исходная матрица:\n" ;
  32. o_matr(a, n) ;
  33. sort_obmenF(a, n) ;
  34. cout << "Матрица с отсортированными строками:" << endl ;
  35. o_matr(a, n) ;
  36. cout << endl ;
  37. //Освобождение динамической памяти
  38. for(i = 0; i < 2*n; i++)
  39. delete a[i] ;
  40. delete a ;
  41. return 0 ;
  42. }
  43.  
  44. void i_matr(tmatr a, int n)
  45. {
  46. for(int i = 0 ; i < 2*n ; i++)
  47. for(int j = 0 ; j < 2*n ; j++)
  48. if (j<n) *(*(a + i) + j) = 10 * i + j+1;
  49. else *(*(a + i) + j) = 10 * i + 2*n-j;
  50. }
  51.  
  52. //сортировка элементов массива по возрастанию методом обмена с флагом
  53. void sort_obmenF(tmatr a, int n)
  54. { int i, j, k, flag ;
  55. telem z ;
  56. for(i = 0 ; i < 2*n ; i++)
  57. {k = n ; //начальное количество не сортированных элементов строки
  58. do{flag = 0 ;
  59. for(j = 0 ; j < k-1 ; j++)
  60. if(j+i<n-1|| i-j>n)
  61. {
  62. if(a[i][j] < a[i][j+1])
  63. {z = a[i][j] ;
  64. a[i][j] = a[i][j+1];
  65. a[i][j+1]= z ;
  66. flag = 1 ;
  67. }
  68. }
  69.  
  70. k-- ;
  71. }while(flag);
  72. }
  73.  
  74. for(i = 0 ; i < 2*n ; i++)
  75. {k = n ; //начальное количество не сортированных элементов строки
  76. do{flag = 0 ;
  77. for(j = 2*n-1 ; j > k-1 ; j--)
  78. if ((j-i>n-1) /* какое-то условие для выбора правого нижнего угла */ )
  79. {
  80. if(a[i][j] > a[i][j+1])
  81. {z = a[i][j] ;
  82. a[i][j] = a[i][j+1];
  83. a[i][j+1]= z ;
  84. flag = 1 ;
  85. }
  86. }
  87.  
  88. k++ ;
  89. }while(flag);
  90. }
  91.  
  92.  
  93.  
  94. }
  95. void o_matr(tmatr a, int n)
  96. { int i, j ;
  97. for(i = 0; i < 2*n; i++)
  98. {for(j = 0; j < 2*n; j++)
  99. {cout.width(2) ; //ширина поля выводимого параметра
  100. cout << *(*(a + i) + j) << ' ' ;
  101. }
  102. cout << '\n';
  103. }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement