/************************************************************************
	sort_cont(Xs,Ys) :- 
        The container Ys is an ordered permutation of the container Xs.
    
        variant body section part of body section container_access
        realizing sort_cont/2 by standard quicksort
*************************************************************************/
:- tap_body(container_access,[container_lib, container_access]).


% declaration of sort_cont/2 is in containter_lib.pl
	sort_cont(Xs,Ys) :- quicksort(Xs,Ys).      % use quicksort  

:- pred quicksort(list(@T), list(@T)).
	quicksort([X|Xs],Ys) :-
		partition(Xs,X,Littles,Bigs),
		quicksort(Littles,Ls),
		quicksort(Bigs,Bs),
		append(Ls,[X|Bs],Ys).
	quicksort([],[]).

:- pred partition(list(@T),T,list(T),list(T)).
	partition([X|Xs],Y,[X|Ls],Bs) :- X @=< Y, partition(Xs,Y,Ls,Bs).
	partition([X|Xs],Y,Ls,[X|Bs]) :- X @>  Y, partition(Xs,Y,Ls,Bs).
	partition([],_Y,[],[]).

:- tap_body_end(container_access).
