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