Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Методы сортировки
- //Массивы динамические двумерные
- //Сортировка элементов всех строк двумерного массива целых чисел
- //по убыванию
- #include<iostream>
- #include <locale.h>
- using namespace std;
- typedef int telem ; //определение типа элементов массива
- typedef telem *tstr ; //определение типа "указатель на telem"
- typedef tstr *tmatr; //определение типа "указатель на указатель на telem"
- void i_matr(tmatr, int);
- void o_matr(tmatr, int);
- void sort_obmenF(tmatr, int) ;
- int main()
- { int i, j ;
- int n ; // половина числа строк матрицы и столбцов матрицы
- tmatr a; //объявляется переменная-указатель на указатель на telem
- setlocale(LC_ALL,"Russian") ;
- cout << "\nВведите количество строк и столбцов матрицы: " ;
- cin >> n;
- a = new tstr [2*n] ; //выделение динамической памяти под массив
- //указателей на строки массива
- for(i = 0; i < 2*n; i++) //цикл выделения памяти под каждую строку
- *(a + i) = new telem [2*n] ;//каждому элементу массива указателей
- //на строки присваивается адрес начала
- //области памяти, выделяемой под строку
- i_matr(a, n) ;
- cout << "Исходная матрица:\n" ;
- o_matr(a, n) ;
- sort_obmenF(a, n) ;
- cout << "Матрица с отсортированными строками:" << endl ;
- o_matr(a, n) ;
- cout << endl ;
- //Освобождение динамической памяти
- for(i = 0; i < 2*n; i++)
- delete a[i] ;
- delete a ;
- return 0 ;
- }
- void i_matr(tmatr a, int n)
- {
- for(int i = 0 ; i < 2*n ; i++)
- for(int j = 0 ; j < 2*n ; j++)
- if (j<n) *(*(a + i) + j) = 10 * i + j+1;
- else *(*(a + i) + j) = 10 * i + 2*n-j;
- }
- //сортировка элементов массива по возрастанию методом обмена с флагом
- void sort_obmenF(tmatr a, int n)
- { int i, j, k, flag ;
- telem z ;
- for(i = 0 ; i < 2*n ; i++)
- {k = n ; //начальное количество не сортированных элементов строки
- do{flag = 0 ;
- for(j = 0 ; j < k-1 ; j++)
- if(j+i<n-1|| i-j>n)
- {
- if(a[i][j] < a[i][j+1])
- {z = a[i][j] ;
- a[i][j] = a[i][j+1];
- a[i][j+1]= z ;
- flag = 1 ;
- }
- }
- k-- ;
- }while(flag);
- }
- for(i = 0 ; i < 2*n ; i++)
- {k = n ; //начальное количество не сортированных элементов строки
- do{flag = 0 ;
- for(j = 2*n-1 ; j > k-1 ; j--)
- if ((j-i>n-1) /* какое-то условие для выбора правого нижнего угла */ )
- {
- if(a[i][j] > a[i][j+1])
- {z = a[i][j] ;
- a[i][j] = a[i][j+1];
- a[i][j+1]= z ;
- flag = 1 ;
- }
- }
- k++ ;
- }while(flag);
- }
- }
- void o_matr(tmatr a, int n)
- { int i, j ;
- for(i = 0; i < 2*n; i++)
- {for(j = 0; j < 2*n; j++)
- {cout.width(2) ; //ширина поля выводимого параметра
- cout << *(*(a + i) + j) << ' ' ;
- }
- cout << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement