Сортировка матрицы. Разместить столбцы в порядке уменьшения сумм их элементов используя циклы и сортировку методом пузырька

В задании указано, что нельзя пользоваться встроенными функциями, только сортировка методом пузырька. Посчитать сумму столбцов двумерной матрицы в отдельный список и уже по нему менять последовательность столбцов от столбца, сумма элементов которого больше, к столбцу с меньшей суммой элементов. Я список с суммами отсортировала, но не понимаю как мне отсортировать столбцы. Использовать дополнительные функции нельзя. Вот мой код, все выполняет без ошибок, но не сортирует верно столбы по суммам их элементов

def sort(mm):
    z = [randint(0, 0) for _ in range(m)]
    for i in range(len(mm[0])):
        for j in range(len(mm)):
            z[i] += mm[j][i]
    swaped = True
    while swaped:
        swaped = False
        for el in range(len(z)-1):
            if z[el+1] > z[el]:
                z[el+1], z[el] = z[el], z[el+1]
                mm[j][el+1], mm[j][el] = mm[j+1][el], mm[j][el+1]

    for run in range(len(mm)-1):
        for i in range(len(mm)-1-run):
            for k in range(len(mm)):
                if k % 2 == 0:
                    if mm[i][k] < mm[i + 1][k]:
                        mm[i][k], mm[i + 1][k] = mm[i + 1][k], mm[i][k]
                else:
                    if mm[i][k] > mm[i+1][k]:
                        mm[i][k], mm[i+1][k] = mm[i+1][k], mm[i][k]
    print(*z)
    return mm

Ответы (1 шт):

Автор решения: Tyzik

Вот рабочее решение с комментариями для вашей задачи. Суть в том чтобы сортировать список и столбцы матрицы одновременно.

from random import *

# процедура для перестановки столбца col1 и col2 местами для матрицы m
def swap(m, col1, col2):
    rows = len(m)
    for i in range(rows):
        m[i][col1], m[i][col2] = m[i][col2], m[i][col1]

def sort(m):
    # получаем количество строк и столбцов
    rows = len(m)
    cols = len(m[0])

    # инициализируем список
    l = [0] * cols

    # считаем сумму
    for i in range (cols):
        for j in range(rows):
            l[i] += m[j][i]

    # сортируем пузырьком сразу и список и столбцы матрицы
    for i in range (cols):
        for j in range(cols - 1, i, -1):
            if (l[j - 1] < l[j]):
                l[j], l[j - 1] =  l[j - 1], l[j]
                swap(m, j, j - 1)
                
    return m

# матрица 4 строки 3 столбца          
arr = [[1, 2, 3],[7, 8, 9],[4, 5, 6],[7, 8, 9]]

# вывод матрицы
for i in arr:
    print(i)
            
arr = sort(arr)
# вывод пустой строки чтобы матрицы не сливались в консоли
print()
# вывод матрицы
for i in arr:
    print(i)
→ Ссылка