Сортировка строк матрицы по минимальному элементу строки
Дана матрица и нужно её преобразовать таким образом,чтобы строки матрицы были отсортированы в зависимости от минимального элемента каждой строки. То есть входные данные такие
[7,2,5,12]
[10,7,3,22]
[23,45,6,1]
[16,4,9,34]
А выходные должны быть такими
[23,45,6,1] - мин.эл 1
[7,2,5,12] - мин.эл 2
[10,7,3,22] - мин.эл 3
[16,4,9,34] - мин.эл 4
Функцию Sort() использовать нельзя
Было сделано следующее
A1=[[1.3, 2.5, 4.5, 0.8],
[0.1, 4.2, 3.4, 2.8],
[3.1, 1.7, 2,2, 4.5],
[0.3, 0.6, 5,1, 0.7],
[2.5, 3.5, 0.4, 5.3],
[1.2, 2.4, 1.8, 7.2]]
print("Сформированная матрица:")
for i in range(len(A1)):
for j in range(len(A1[i])):
print(A1[i][j], end = ' ')
print()
print("Преобразованная матрица")
min=0;
for i in range(len(A1)):
for j in range(len(A1[0])):
if A1[i[j]< A1[0]{j]:
min= A1[i][j]
A1[i][j]= A1[0][j];
A1[0][j]= min
print(" Минимальный элемент", i," строки = ", min)
for i in range(len(A1)):
for j in range(len(A1[i])):
print(A1[i][j], end = ' ')
print()
В коде выше, вывел матрицы с помощью цикла нахожу минимальный элемент,заношу его в специальную переменную min но что именно дальше делать?Нашёл минимальный элемент,как сделать сортировку строк не используя sort()
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Можно, конечно, схитрить, использовав не sort, а sorted:
A2 = sorted(A1, key=min)
Используется "пузырьковая сортировка" - не слишком оптимально, но вполне наглядно:
A1=[[1.3, 2.5, 4.5, 0.8],
[0.1, 4.2, 3.4, 2.8],
[3.1, 1.7, 2,2, 4.5],
[0.3, 0.6, 5,1, 0.7],
[2.5, 3.5, 0.4, 5.3],
[1.2, 2.4, 1.8, 7.2]]
def print_matrix(matrix):
for row in matrix:
for el in row:
print(el, end=' ')
print()
print()
def sort_matrix(matrix):
min_elements = [min(row) for row in matrix] # запоминаем минимальные элементы
matrix_len = len(matrix)
# собственно, "пузырьковая сортировка"
for k in range(matrix_len-1):
for i in range(matrix_len-k-1):
if min_elements[i] > min_elements[i+1]:
min_elements[i], min_elements[i+1] = min_elements[i+1], min_elements[i]
matrix[i], matrix[i+1] = matrix[i+1], matrix[i]
return None
print_matrix(A1)
sort_matrix(A1)
print_matrix(A1)