15_Сортировка матриц.ppt
- Количество слайдов: 15
Сортировка матриц
Разновидности сортировок матриц • Частичная сортировка предполагает сортировку отдельных частей матрицы, независимо от других частей. • Полная сортировка матрицы заключается в том, что в одной процедуре сортировки участвуют все элементы матрицы.
Задачи частичной сортировки • Сортировка каждой строки или каждого столбца независимо от других. • Сортировка одной из диагоналей матрицы. • Сортировка строк или столбцов матрицы по значению первого элемента. • Сортировка строк или столбцов матрицы по сумме элементов.
procedure Sort. Matr (var a: TMatr 10 x 10; n. Row, n. Col: integer); var i, j, integer; begin sum. Row(a, n. Row, n. Col); for i: = 1 to n. Row do for j : = i + 1 to n. Row do if a[ i, n. Col+1] > a[ j, n. Col+1] then change. Row(a, n. Col, i, j ); end;
procedure sum. Row (var a: TMatr 10 x 10; n. Row, n. Col: integer); var i, j integer; begin for i: = 1 to n. Row do begin a[ i, n. Col+1]: =0; for j : = 1 to n. Col do a[ i, n. Col+1]: = a[ i, n. Col+1] + a[ i, j ]; end;
procedure change. Row (var a: TMatr 10 x 10; n. Col, r 1, r 2: integer); var j, buf: integer; begin for j : = 1 to n. Col+1 do begin buf : = a[r 1, j ]; a[r 1, j ] : = a[r 2, j ]; a[r 2, j ] : = buf; end;
Полная сортировка матриц Такая сортировка обеспечивает расположение элементов матрицы по возрастанию или убыванию в направлении заданного способа обхода матрицы: • По строкам сверху вниз и слева направо, или снизу вверх и справа налево, или змейкой. • То же самое по столбцам. • То же самое по линиям параллельным главной или вспомогательной диагоналям. • Углом, вершина которого находится на главной или вспомогательной диагонали. • Спиралью от краев к центру.
Реализация сортировки • • Полную сортировку матрицы всегда можно свести к сортировке массива. Для этого следует: Переписать элементы матрицы в массив в любом порядке. Затем массив отсортировать. После этого элементы массива нужно последовательно переписать в матрицу, обходя ее по заданному маршруту. Таким образом, в общем случае проблема полной сортировки матрицы сводится к реализации обхода ее элементов по требуемому маршруту
Переписывание матрицы в массив Procedure Matr. To. Array(m: TMatr. Int 10 x 10; n. Row, n. Col: integer; var a: TArray 100); var n, i, j: integer; begin n : = 0; for i : = 1 to n. Row do for j : = 1 to n. Col do begin n : = n + 1; a[ n ] : = m[ i, j ]; end;
Реализация процедур маршрутизации Процедура маршрутизации состоит в том, что внутри цикла прохода по отсортированному массиву необходимо последовательно вычислять координаты соответствующих элементов матрицы
Расчетный способ маршрутизации В этом случае координаты элемента матрицы вычисляются по индексу массива row: =( (i-1) div n. Col ) + 1; col: =(i-1) mod n. Col + 1;
procedure fill. Hrz. Line(var m: TMatr. Int 10 x 10; n. Row, n. Col: integer; ar: TArray 100); var i, row, col: integer; begin for i : = 1 to n. Row * n. Col do begin row: =( (i-1) div n. Col ) + 1; col: =(i-1) mod n. Col + 1; m[row, col] : = ar[i]; end;
Моделирование маршрута В этом случае индекс элемента массива обычно не используется. Координаты элемента матрицы вычисляются исходя из их предыдущих значений с учетом особенностей маршрута
Уголком, сверху – вниз – налево, от начала главной диагонали
procedure fill. Corner. Top. Left(var m: TMatr. Int 10 x 10; n. Row, n. Col: integer; ar: TArray 100); var i, row, col: integer; begin row: =1; col: =1; for i: =1 to n. Row*n. Col do begin m[row, col] : = ar[i]; if col = 1 then begin col : = row + 1; row : = 1; end else if row < col then row : = row + 1 else col : = col - 1; end;


