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 scala, erlang, rust, haskell , F# y lisp.
Ahora le toca a Pony. 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 vacía o tiene un elemento, ya esta ordenada.
Vamos al código:
actor Main
new create(env: Env) =>
let data = [4; 2; 7; 1; 3; 6; 5]
env.out.print("Original: " + data.string())
let sorted = quicksort(data)
env.out.print("Sorted: " + sorted.string())
fun quicksort(data: Array[U64]): Array[U64] =>
if data.size() <= 1 then
data
else
let pivot = data(0)?
let less = data.values().filter(lambda(x: U64): Bool => x < pivot end)
let greater = data.values().filter(lambda(x: U64): Bool => x > pivot end)
let less_sorted = quicksort(less)
let greater_sorted = quicksort(greater)
let result = less_sorted.append(pivot)
result.append(greater_sorted)
end