Sorting algorithms/Permutation sort
func psort(x, d=x.end) {
if (d == 0) {
for i in (1 .. x.end) {
(x[i] < x[i-1]) && return false
}
return true
}
(d+1).times {
x.prepend(x.splice(d, 1)...)
x[d] < x[d-1] && next
psort(x, d-1) && return true
}
return false
}
var a = 10.of { 100.irand }
say "Before:\t#{a}"
psort(a)
say "After:\t#{a}"
Output:
Before: 60 98 85 85 37 0 62 96 95 2
After: 0 2 37 60 62 85 85 95 96 98