Skip to content

Commit ffce7ef

Browse files
committed
added mergesort in prolog
1 parent 20dcf04 commit ffce7ef

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
first([H|_], H).
2+
3+
split(A, B, C) :-
4+
append(B, C, A), length(B, L1), length(C, L2), L1 = L2.
5+
split(A, B, C) :-
6+
append(B, C, A), length(B, L1), length(C, L2), L3 is L2+1, L1 = L3.
7+
8+
9+
merge([], R, R).
10+
merge(L, [], L).
11+
12+
merge([L1|L2], R, B) :-
13+
first(R, R1), L1 =< R1, merge(L2, R, C), append([L1], C, B).
14+
merge(L, [R1|R2], B) :-
15+
first(L, L1), R1 < L1, merge(R2, L, C), append([R1], C, B).
16+
17+
18+
mergesort([H|[]], [H]).
19+
20+
mergesort(A, B) :-
21+
length(A, Len), Len > 1,
22+
split(A, L, R),
23+
mergesort(L, SL), mergesort(R, SR),
24+
merge(SL, SR, B).

0 commit comments

Comments
 (0)