Лабораторная работа № 9
Лабораторная работа №9
Задачи на сортировку двумерных массивов
Цель работы
Изучение алгоритмов сортировки двумерных массивов и их реализация на практике.
Теоретическая часть
Двумерный массив — это упорядоченная последовательность элементов, организованная в виде таблицы (матрицы).
Основные виды сортировки:
· По строкам
· По столбцам
· По диагонали
· По сумме строк
· По количеству элементов
Практическая часть
Задание 1. Сортировка строк матрицы по возрастанию.
Создайте программу, которая сортирует каждую строку двумерного массива по возрастанию. Например, для матрицы 3x3:
|
Исходная матрица: |
Результат: |
|
5 2 8 |
2 5 8 |
|
3 9 1 |
1 3 9 |
|
7 4 6 |
4 6 7 |
Алгоритм:
1. Ввод размеров матрицы
2. Заполнение матрицы
3. Сортировка каждой строки методом пузырька
4. Вывод результата
Пример кода:
pascal
procedure SortRows(var A: array[,] of integer; n, m: integer);var i, j, k: integer;beginfori :=1tondo
forj :=1tom-1do
fork := j+1tomdo
ifA[i,j] > A[i,k]then
begin
swap(A[i,j], A[i,k]);end;
end;
Задание 2. Сортировка столбцов по убыванию.
Сортировка столбцов матрицы по
убыванию:
Напишите программу, которая сортирует каждый столбец матрицы по убыванию.
Например:
|
Исходная матрица: |
Результат: |
|
4 2 6 |
8 7 9 |
|
1 5 3 |
4 5 6 |
|
8 7 9 |
1 2 3 |
Алгоритм:
1. Ввод размеров матрицы
2. Заполнение матрицы
3. Сортировка каждого столбца
4. Вывод результата
Пример кода:
pascal
procedure SortColumns(var A: array[,] of integer; n, m: integer);var i, j, k: integer;beginforj :=1tomdo
fori :=1ton-1do
fork := i+1tondo
ifA[i,j] < A[k,j]then
begin
swap(A[i,j], A[k,j]);end;
end;
Задание 3. Сортировка главной диагонали.
Создайте программу, которая сортирует элементы главной диагонали матрицы по возрастанию. Например:
|
Исходная матрица: |
Результат: |
|
9 2 3 |
5 2 3 |
|
4 8 1 |
4 8 1 |
|
7 6 5 |
7 6 9 |
Алгоритм:
1. Извлечение элементов диагонали
2. Сортировка извлеченных элементов
3. Возврат отсортированных элементов на место
Пример кода:
pascal
procedure SortDiagonal(var A: array[,] of integer; n: integer);var i, j, temp: integer;beginfori :=1ton-1do
forj := i+1tondo
ifA[i,i] > A[j,j]then
begin
temp := A[i,i]; A[i,i] := A[j,j]; A[j,j] := temp;end;
end;
Задание 4. Сортировка по сумме строк.
Напишите программу, которая сортирует строки матрицы по возрастанию суммы их элементов. Например:
|
Исходная матрица: |
Результат: |
|
1 2 3 |
1 2 3 |
|
4 5 6 |
4 5 6 |
|
7 8 9 |
7 8 9 |
Алгоритм:
1. Вычисление сумм строк
2. Сортировка строк по суммам
3. Перестановка строк
Пример кода:
pascal
procedure SortBySum(var A: array[,] of integer; n, m: integer);var i, j, k, sum1, sum2: integer;beginfori :=1ton-1do
forj := i+1tondo
begin
sum1 :=0; sum2 :=0;
fork :=1tomdo
begin
sum1 := sum1 + A[i,k]; sum2 := sum2 + A[j,k];end;
ifsum1 > sum2then
fork :=1tomdo
swap(A[i,k], A[j,k]);end;
end;
Задание 5. Сортировка по четным элементам.
Создайте программу, которая сортирует строки матрицы по количеству четных чисел в них. Например:
|
Исходная матрица: |
Результат: |
|
2 3 4 |
1 6 8 |
|
1 6 8 |
2 3 4 |
|
5 7 9 |
5 7 9 |
Алгоритм:
1. Подсчет четных элементов в строках
2. Сортировка строк по количеству четных
3. Перестановка строк
Пример кода:
pascal
procedure SortByEven(var A: array[,] of integer; n, m: integer);var i, j, k, even1, even2: integer;beginfori :=1ton-1do
forj := i+1tondo
begin
even1 :=0; even2 :=0;
fork :=1tomdo
begin
ifnotodd(A[i,k])theninc(even1);
ifnotodd(A[j,k])theninc(even2);
end;
ifeven1 > even2then
fork :=1tomdo