Herramientas de usuario

Herramientas del sitio


algo2:main:2012:cola

¡Esta es una revisión vieja del documento!


import Array

data Cola e = Vacia

            | Encolar (Cola e) e
            deriving Show

es_vacia :: Cola e → Bool primero :: Cola e → e – se aplica a colas no vacías decolar :: Cola e → Cola e – se aplica a colas no vacías

es_vacia Vacia = True es_vacia (Encolar q e) = False

primero (Encolar Vacia e) = e primero (Encolar q e) = primero q

decolar (Encolar Vacia e) = Vacia decolar (Encolar q e) = Encolar (decolar q) e

– Ejemplos

q0 = Vacia :: Cola Int q1 = Encolar q0 1 q2 = Encolar q1 2 q3 = Encolar q2 3 q4 = Encolar q3 4

decolar_todo :: Cola e → [e] decolar_todo q = if es_vacia q then [] else primero q : decolar_todo (decolar q)

arreglo_ini :: Array Int (Cola Int) arreglo_ini = array (0,9) [(i,Vacia) | i← [0..9]]

radix_sort :: [Int] → [Int] radix_sort as = radix_fase 3 (radix_fase 2 (radix_fase 1 as))

radix_fase :: Int → [Int] → [Int] radix_fase i as = juntar (clasificar i as arreglo_ini)

clasificar :: Int → [Int] → Array Int (Cola Int) → Array Int (Cola Int) clasificar i [] a = a clasificar i (x:xs) a = clasificar i xs (modificar_arreglo a k (`Encolar` x))

                    where k = iesimo_digito i x

modificar_arreglo :: Ix a ⇒ Array a b → a → (b → b) → Array a b modificar_arreglo a i f = a [(i,f (a!i))] iesimo_digito :: Int → Int → Int iesimo_digito i x = (x `div` 10^(i-1)) `mod` 10 juntar :: Array Int (Cola Int) → [Int] juntar a = juntar_rec [0..9] where juntar_rec [] = [] juntar_rec (i:is) = decolar_todo (a!i) ++ juntar_rec is

algo2/main/2012/cola.1336420121.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)