Ordenación por una fila
Las matrices se pueden representar por listas de lista. Por ejemplo, la matriz
1 2 3 4 |
|1 2 5| |3 0 7| |9 1 6| |6 4 2| |
se puede representar por
1 2 3 4 5 |
ej :: [[Int]] ej = [[1,2,5], [3,0,7], [9,1,6], [6,4,2]] |
Definir la función
1 |
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,
1 2 3 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import Data.List (sort, transpose) ej :: [[Int]] ej = [[1,2,5], [3,0,7], [9,1,6], [6,4,2]] -- 1ª solución -- =========== 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]) -- 2ª solución -- =========== ordenaPorFila2 :: Ord a => [[a]] -> Int -> [[a]] ordenaPorFila2 xss k = [[x | (_,x) <- sort $ zip (xss!!k) xs ] | xs <- xss] |