Name: Anonymous 2011-06-29 5:30
Camelcase
// Symta
qsort [H@T] -> f:r**keep => @(f ?<H T) H @(f ?>=H T)
// Ruby
def quicksort(list, p, r)
if p < r then
q = partition(list, p, r)
quicksort(list, p, q-1)
quicksort(list, q+1, r)
end
end
def partition(list, p, r)
pivot = list[r]
i = p - 1
p.upto(r-1) do |j|
if list[j] <= pivot
i = i+1
list[i], list[j] = list[j],list[i]
end
end
list[i+1],list[r] = list[r],list[i+1]
return i + 1
// OCaml
let partition p l =
let rec part yes no = function
| [] -> (rev yes, rev no)
| x :: l -> if p x then part (x :: yes) no l else part yes (x :: no) l in
part [] [] l
let rec quicksort = function
| (x::xs) ->
let (lower,higher) = List.partition (fun i -> i < x) xs in
quicksort1 lower @ [x] @ quicksort1 higher
| [] -> []
;;