Ordenación por una fila
Las matrices se pueden representar por listas de lista. Por ejemplo, la matriz
|1 2 5| |3 0 7| |9 1 6| |6 4 2|
se puede representar por
ej :: [[Int]] ej = [[1,2,5], [3,0,7], [9,1,6], [6,4,2]]
Definir la función
ordenaPorFila :: Ord a => [[a]] -> Int -> [[a]]
tal que (ordenaPorFila xss k) es la matriz obtenida ordenando xs por los elementos de la fila k. Por ejemplo,
ordenaPorFila ej 1 == [[2,1,5],[0,3,7],[1,9,6],[4,6,2]] ordenaPorFila ej 2 == [[2,5,1],[0,7,3],[1,6,9],[4,2,6]] ordenaPorFila ej 3 == [[5,2,1],[7,0,3],[6,1,9],[2,4,6]]
Soluciones
import Data.List (sort, transpose) ej :: [[Int]] ej = [[1,2,5], [3,0,7], [9,1,6], [6,4,2]] ordenaPorFila :: Ord a => [[a]] -> Int -> [[a]] ordenaPorFila xss k = transpose (ordenaPorColumna (transpose xss) k) ordenaPorColumna :: Ord a => [[a]] -> Int -> [[a]] ordenaPorColumna xss k = map snd (sort [(xs!!k,xs) | xs <- xss])