Сортировка матрицы
Дана матрица n * m , нужно отсортировать и вывести колонками от самого маленького к самому большому, у меня не выходит сделать, смотреть ниже. Мой код:
n , m = map(int,input().split()) matrix = [list(map(int,input().split())) for i in range(n)] matrix_copy = copy.deepcopy(matrix) li = [] for i in range(n): for j in range(m): li.append(matrix[i][j]) li.sort() k = -1 for i in range(n): for j in range(m): k +=1 matrix_copy[i][j] = li[k] x = (list(zip(*matrix_copy))) for i in x: print(*i)
Вход: n — количество строк, m- количество колонок, потом вводим матрицу нужного размера. Как работает у меня:
input: 3 3 4 1 3 2 5 7 9 8 6 output: 1 4 7 2 5 8 3 6 9 input: 1 3 4 2 1 output: 1 2 4 input: 3 1 9 7 8 output: 7 8 9
Как должно быть:
input0: 3 3 4 1 3 2 5 7 9 8 6 output0: 1 4 7 2 5 8 3 6 9 input1: 1 3 4 2 1 output1: 1 2 4 input2: 3 1 9 7 8 output2: 7 8 9
Сортируйте матрицу по строкам и по столбцам, используя Python
В этой статье мы изучим программу на Python для сортировки матрицы по строкам и столбцам.
Предположим, мы взяли входную матрицу MxM. Теперь мы отсортируем данную входную матрицу по строкам и по столбцам, используя вложенный цикл for.
Алгоритм (шаги)
Ниже приведены алгоритмы/шаги, которые необходимо выполнить для выполнения желаемой задачи. −
-
Создайте функцию sortingMatrixByRow() для сортировки каждой строки матрицы, т. е. по строкам, принимая входную матрицу m (количество строк) в качестве аргументов.
Пример
Следующая программа возвращает отсортированную матрицу по строкам и столбцам для данной входной матрицы, используя вложенные циклы for:
# creating a function for sorting each row of matrix row-wise def sortingMatrixByRow(inputMatrix, m): # traversing till the length of rows of a matrix for p in range(m): # Sorting the current row for q in range(m-1): # checking whether the current element is greater than the next element if inputMatrix[p][q] >inputMatrix[p][q + 1]: # swapping the elements using a temporary variable # if the condition is true tempVariable = inputMatrix[p][q] inputMatrix[p][q] = inputMatrix[p][q + 1] inputMatrix[p][q + 1] = tempVariable # creating a function to get the transpose of a matrix # by accepting the input matrix, m values as arguments def transposeMatrix(inputMatrix, m): # traversing through the rows of a matrix for p in range(m): # Traversing from row +1 column to last column for q in range(p + 1, m): # Swapping the element at index (p,q) with (q,p) temp = inputMatrix[p][q] inputMatrix[p][q] = inputMatrix[q][p] inputMatrix[q][p] = temp # creating a function for sorting the matrix rows column-wise def sortMatrixRowandColumn(inputMatrix, m): # sorting the rows of an input matrix by # calling the above defined sortingMatrixByRow() function sortingMatrixByRow(inputMatrix, m) # getting the transpose of an input matrix by # calling the above defined transposeMatrix() function transposeMatrix(inputMatrix, m) # once again sorting the rows of an input matrix by # calling the above defined sortingMatrixByRow() function sortingMatrixByRow(inputMatrix, m) # once again getting the transpose of an input matrix(So we sorted the columns) transposeMatrix(inputMatrix, m) # creating a function to print the matrix def printingMatrix(inputMatrix, rows): # Traversing in the rows of the input matrix for i in range(rows): # Traversing in the columns corresponding to the current row # of the input matrix for j in range(rows): print(inputMatrix[i][j], end=" ") # Printing a new line to separate the rows print() # input matrix inputMatrix = [[2, 6, 5], [1, 9, 8], [7, 3, 10]] # input m value representing 3x3 matrix # (dimensions) m = 3 print("Input Matrix:") # printing the input matrix by calling the above # printingMatrix() function printingMatrix(inputMatrix, m) # calling the above defined sortMatrixRowandColumn() function # by passing the input matrix, m values to it to # sort the matrix row and column-wise sortMatrixRowandColumn(inputMatrix, m) # printing the input matrix after sorting row and column-wise # by calling the above printingMatrix() function print("Input Matrix after sorting row and column-wise:") printingMatrix(inputMatrix, m)
Выход
При выполнении вышеуказанная программа сгенерирует следующий вывод:
Input Matrix: 2 6 5 1 9 8 7 3 10 Input Matrix after sorting row and column-wise: 1 5 6 2 7 9 3 8 10
Временная сложность — O(n^2 log2n)
Вспомогательное пространство – O(1)
Заключение
В этой статье мы узнали, как использовать Python для сортировки заданной матрицы как по строкам, так и по столбцам. Кроме того, мы узнали, как транспонировать данную матрицу и как сортировать матрицу по строкам, используя вложенные циклы for (вместо использования встроенного метода sort()).
Python-сообщество
![]()
- Начало
- » Python для новичков
- » Сортировка строк матрицы по минимальному элементу строки
#1 Дек. 29, 2020 16:10:29
Typical_beginer Зарегистрирован: 2020-12-29 Сообщения: 12 Репутация: 0 Профиль Отправить e-mail
Сортировка строк матрицы по минимальному элементу строки
Дана матрица и нужно её преобразовать таким образом,чтобы строки матрицы были отсортированы в зависимости от минимального элемента каждой строки.
То есть входные данные такие
[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()
Отредактировано Typical_beginer (Дек. 29, 2020 16:18:02)
Программа Python для сортировки двумерного массива по столбцам
Когда объявлен двумерный или двумерный массив, он рассматривается как матрица. Итак, мы знаем, что матрица состоит из строк и столбцов. Процесс сортировки элементов, принадлежащих определенному столбцу матрицы, в порядке возрастания или убывания, известен как сортировка двумерного массива по столбцам. Давайте рассмотрим алгоритм, за которым следует сценарий ввода-вывода, чтобы понять точное применение этой концепции.
Сценарий ввода-вывода
Рассмотрим двумерный массив.
arr = [[ 7, 9, 5, 7 ], [9, 5, 9, 4], [2, 7, 8, 6], [ 8, 6, 6, 5]]
Матричное представление вышеуказанного двумерного массива выглядит следующим образом:
7 9 5 7 9 5 9 4 2 7 8 6 8 6 6 5
Теперь давайте отсортируем данную матрицу по столбцам в порядке убывания.
9 9 5 7 8 7 9 6 7 6 8 5 2 5 6 4
- Представление массива отсортированной матрицы:
[[9, 9, 9, 7 ], [7, 7, 8, 6], [8, 6, 6, 5], [ 2, 5, 5, 4 ]]
Пример
В этом примере мы обсудим, как сортировать двумерный массив по столбцам. Шаги, которые необходимо выполнить для создания желаемой программы, следующие:
- Шаг 1 — Объявить двумерный массив
- Шаг 2 — Просмотрите все столбцы элементов, чтобы соответствующим образом отсортировать их.
- Шаг 3 — Сравните элементы одного и того же столбца так, чтобы один элемент был меньше другого, следуя условию.
- Шаг 4 — Поменяйте местами элементы, если условие не выполнено.
- Шаг 5 — Продолжайте тот же процесс, пока все элементы в столбцах не будут покрыты, и, наконец, напечатайте массив в отсортированном виде.
def sort_the_array_column_wise(arr): for j in range (size): for i in range(size - 1): if arr[i][j] < arr[i + 1][j]: temp = arr[i][j] arr[i][j] = arr[i + 1][j] arr[i + 1][j] = temp for i in range(size): for j in range(size): print(arr[i][j], end=" ") print() arr = [[7, 9, 5, 7 ], [9, 5, 9, 4], [2, 7, 8, 6], [ 8, 6, 6, 5 ]] size = len(arr) print("The array before performing sorting operation is: ") for i in range(size): for j in range(size): print(arr[i][j], end=" ") print() print("The array after performing sorting operation is: ") sort_the_array_column_wise(arr)
Выход
Вывод вышеуказанной программы следующий:
The array before performing sorting operation is: 7 9 5 7 9 5 9 4 2 7 8 6 8 6 6 5 The array after performing sorting operation is: 9 9 9 7 7 7 8 6 8 6 6 5 2 5 5 4
Заключение
Мы ясно видим, что выходные данные фактически соответствуют ожидаемому результату в приведенном выше примере. Точно так же сортировку двумерного массива по строкам можно выполнить, изменив несколько операторов в приведенной выше программе. Вот как работает концепция сортировки 2D-массивов по столбцам.
Все права защищены. © Linux-Console.net • 2019-2023