Translate

sábado, 29 de agosto de 2026

Quickysort en Raku


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 Erlang, Rust, haskell y lisp

Ahora le toca a Raku el Perl moderno. Básicamente, el algoritmo toma un pivote y agrupa los menores que el pivote al principio y los mayores al final y aplica quicksort a estos dos grupos. Y si la lista es vacía o tiene un elemento, ya está ordenada. 

Vamos al código: 

sub quicksort(@list) {

    return @list if @list <= 1;

    my $pivot = @list[0];


    my @smaller = @list[1..*].grep(* <= $pivot);

    my @greater = @list[1..*].grep(* > $pivot);

    return quicksort(@smaller), $pivot, quicksort(@greater);

}

Pero podemos aprovechar más el estilo de Raku:


sub quicksort(@list) {

    return @list if @list ≤ 1;


    my $pivot = @list[0];

    (

        quicksort(@list[1..*].grep(* ≤ $pivot)),

        $pivot,

        quicksort(@list[1..*].grep(* > $pivot))

    ).flat

}

flat aplana el resultado.




No hay comentarios.:

Publicar un comentario