#* http://rosettacode.org/wiki/Sorting_algorithms/Quicksort
Implementation of quicksort
*#
quicksort = { list |
true? list.length <= 1
{ list }
{
less = []
equal = []
greater = []
pivot = list[random(list.length - 1)]
list.each { elem |
when { elem < pivot } { less << elem }
{ elem == pivot } { equal << elem }
{ elem > pivot } { greater << elem }
}
quicksort(less) + equal + quicksort(greater)
}
}
quicksort(1.to(10000).shuffle!)
#* Sadly, nested calls is actually ~38% faster than using when:
true? elem < pivot
{ less << elem }
{ true? elem == pivot
{ equal << elem }
{ true? elem > pivot
{ greater << elem }
}
}
But it's uglier than the code above.