aboutsummaryrefslogtreecommitdiff
path: root/samples/Prolog/quicksort.pl
diff options
context:
space:
mode:
Diffstat (limited to 'samples/Prolog/quicksort.pl')
-rw-r--r--samples/Prolog/quicksort.pl13
1 files changed, 13 insertions, 0 deletions
diff --git a/samples/Prolog/quicksort.pl b/samples/Prolog/quicksort.pl
new file mode 100644
index 0000000..eb4467b
--- /dev/null
+++ b/samples/Prolog/quicksort.pl
@@ -0,0 +1,13 @@
+partition([], _, [], []).
+partition([X|Xs], Pivot, Smalls, Bigs) :-
+ ( X @< Pivot ->
+ Smalls = [X|Rest],
+ partition(Xs, Pivot, Rest, Bigs)
+ ; Bigs = [X|Rest],
+ partition(Xs, Pivot, Smalls, Rest)
+ ).
+
+quicksort([]) --> [].
+quicksort([X|Xs]) -->
+ { partition(Xs, X, Smaller, Bigger) },
+ quicksort(Smaller), [X], quicksort(Bigger).