 :- seqex([partition/4, append/3]).

quick_sort([],[]).
quick_sort([First|L1],L2) :-
	partition(First,L1,Ls,Lg), 
	(quick_sort(Ls,Ls2) // quick_sort(Lg,Lg2)),
	append(Ls2,[First|Lg2],L2).

partition(F,[],[],[]).
partition(F,[X|Y],[X|Y1],Y2) :- X =< F, partition(F,Y,Y1,Y2).
partition(F,[X|Y],Y1,[X|Y2]) :- X > F,	partition(F,Y,Y1,Y2).

append([],L,L).
append([X|Y],L,[X|Z]) :- append(Y,L,Z).

/* test(done) :- quick_sort([40,99,91,93,90,3,1,2,4,10,12,12,51,59,56,54,57,58,
55,53,50,5,8,6,7,22,24,23,21,14,17,15,16,11,32,9,76,75,11,18,10,44,55,101,3,
9,89,78,34,1,10,44,66,8,68,86,20,90,20,100,3,4,5,19,18,17,44,91,90,88,75,2,
4,77,111,200,900,798,656,39,303,939,404,707,474,298,12,40,299,291,293,290,23,
21,22,24,210,212,212,251,259,256,254,257,258,255,253,250,25,28,26,27,222,224,
223,221,214,217,215,216,211,232,29,276,275,211,218,210,244,255,2101,23,29,
289,278,234,21,210,244,266,28,268,286,220,290,220,2100,23,24,25,219,218,217,
244,291,290,288,275,22,24,277,2111,2200,2900,2798,2656,239,2303,2939,2404,
2707,2474,2298,212,240,-99,-91,-93,-90,-3,-1,-2,-4,-10,-12,-12,-51,-59,-56,
-54,-57,-58,-55,-53,-50,-5,-8,-6,-7,-22,-24,-23,-21,-14,-17,-15,-16,-11,-32,
-9,-76,-75,-11,-18,-10,-44,-55,-101,-3,-9,-89,-78,-34,-1,-10,-44,-66,-8,-68,
-86,-20,-90,-20,-100,-3,-4,-5,-19,-18,-17,-44,-91,-90,-88,-75,-2,-4,-77,-111,
-200,-900,-798,-656,-39,-303,-939,-404,-707,-474,-298,-12,1000,40,799,791,
793,790,73,71,72,74,710,712,712,751,759,756,754,757,758,755,753,750,75,78,
76,77,722,724,723,721,714,717,715,716,711,732,79,776,775,711,718,710,744,
755,7101,73,79,789,778,734,71,710,744,766,78,768,786,720,790,720,7100,73,74,
75,719,718,717,744,791,790,788,775,72,74,777,7111,7200,7900,7798,7656,739,
7303,7939,7404,7707,7474,7298,712,7,40,599,591,593,590,53,51,52,54,510,512,
512,551,559,556,554,557,558,555,553,550,55,58,56,57,522,524,523,521,514,
517,515,516,511,532,59,576,575,511,518,510,544,555,5101,53,59,589,578,534,
51,510,544,566,58,568,586,520,590,520,5100,53,54,55,519,518,517,544,591,590,
588,575,52,54,577,5111,5200,5900,5798,5656,539,5303,5939,5404,5707,5474,
5298,512], L, 437). 

?- test(X).  */

?- quick_sort([512,551,559,556,554,557,558,517,515,516,511,532,59,576,575,511,518,510,544,555,5101,53,59,589,578], L). 


