miércoles, 22 de noviembre de 2023

Quicksort in lisp


Un Algoritmo que me gusta mucho es el quicksort, porque es un algoritmo por demás claro. Ya he escrito lo fácil que es implementarlo en haskell 

Ahora le toca a lisp. Básicamente el algoritmo toma un pivot y agrupa los menores del pivot al principio y los mayores al final y aplica quicksort a estos 2 grupos. Y si la lista es vacia, ya esta ordenada. 

Vamos al código: 


(defun qso (l) 

   (cond 

     ((null l) l)

     (T (append 

         (qso (remove-if (lambda (a) (> a (first l))) (rest l)))

         (cons 

           (first l)

           (qso (remove-if (lambda (a) (<= a (first l))) (rest l)))

         )

        )

     )

   )

)


3 comentarios:

  1. Funciona bien, pero Lisp es muy difícil leer si no tiene el formato habitual. Esto seria un poco mas común: https://gist.github.com/cgay/577d57b9928a16b7cbc78228730a9455

    ResponderBorrar
    Respuestas
    1. o te falta tener en cuenta cuando la lista esta vacía o no entiendo. Saludos y gracias.

      Borrar
    2. (cond ((null l) l) (t ...)) es lo mismo que (when l ...)

      Borrar