%	Quicksort program.
%	NOTE: '<' works for atoms as well as numbers
%       example: sort([3,7,2,5,1,4,6],X)?

sort(L0, L) :- qsort(L0, L, []).

qsort([X, ..L], R, R0) :- !,
	partition(L, X, L0, L1), 
	qsort(L1, R1, R0), 
	qsort(L0, R, [X, ..R1]).
qsort([], R, R).

partition([X, ..L], Y, [X, ..L0], L1) :-
	X < Y, !, 
	partition(L, Y, L0, L1).
partition([X, ..L], Y, L0, [X, ..L1]) :- !,
	partition(L, Y, L0, L1).
partition([], _, [], []).
