Медленно, но без потерь памяти - перестановками. Т.е. если не очень важна скорость используйте сортировку хотя бы тем же пузырьком, но двухмерную. Перебираем все элементы матрицы двигаясь по побочным диагоналям 11 12 21 13 22 31.... Каждый элемент нужно сравнить с 8 элементами вокруг него (хотя, на самом деле хватит и трех, правее, ниже, правее-ниже) и найти наилучшего кандидата на обмен местами. Сравнение вести по сумме x+y или лучше по квадрату длины вектора (x^2+y^2). Повторять перебор матрицы пока есть обмены. Т.к. самый тяжёлый элемент упадёт в конец матрицы, можно каждый новый проход делать не единицу короче.
Есть много способов ускорить это дело через дополнительные массивы и индексы. Простейший способ как отмечалось выше: развернуть в одномерный (по побочным диагоналям), отсортировать эффективным алгоритмом (коих море) по тому же критерию x^2+y^2, свернуть обратно в двухмерный.
Все умозрительно. Надо проверять.