# Сложность А, задание 5
# Сортировка побочной диагонали квадратной матрицы по возрастанию методом вставок
import random
def print_matrix(matrix):
for row in matrix:
print(" ".join(f"{x:4d}" for x in row))
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
n = int(input("Введите размер квадратной матрицы n: "))
matrix = [[random.randint(-50, 50) for _ in range(n)] for _ in range(n)]
print("\nИсходная матрица:")
print_matrix(matrix)
# Побочная диагональ: элементы matrix[i][n - 1 - i]
diagonal = [matrix[i][n - 1 - i] for i in range(n)]
print("\nПобочная диагональ до сортировки:", diagonal)
insertion_sort(diagonal)
# Записываем отсортированные значения обратно (сверху вниз)
for i in range(n):
matrix[i][n - 1 - i] = diagonal[i]
print("Побочная диагональ после сортировки:", diagonal)
print("\nМатрица после сортировки:")
print_matrix(matrix)
# Сложность Б, задание 5
# Сортировка строк матрицы по убыванию суммы элементов строк (сортировка пузырьком)
import random
def print_matrix(matrix):
for row in matrix:
print(" ".join(f"{x:4d}" for x in row), " | сумма =", sum(row))
def bubble_sort_rows(matrix):
n = len(matrix)
for i in range(n - 1):
swapped = False
for j in range(n - 1 - i):
# Если сумма текущей строки меньше суммы следующей — меняем местами
if sum(matrix[j]) < sum(matrix[j + 1]):
matrix[j], matrix[j + 1] = matrix[j + 1], matrix[j]
swapped = True
if not swapped:
break
rows = int(input("Введите количество строк: "))
cols = int(input("Введите количество столбцов: "))
matrix = [[random.randint(-50, 50) for _ in range(cols)] for _ in range(rows)]
print("\nИсходная матрица:")
print_matrix(matrix)
bubble_sort_rows(matrix)
print("\nМатрица после сортировки строк по убыванию суммы:")
print_matrix(matrix)