March 2014 update
This commit is contained in:
parent
09687c4926
commit
a25938f123
1846 changed files with 21876 additions and 5203 deletions
|
|
@ -1,7 +1,20 @@
|
|||
:- module merge_sort.
|
||||
|
||||
:- interface.
|
||||
|
||||
:- import_module list.
|
||||
|
||||
:- type split_error ---> split_error.
|
||||
|
||||
:- func merge_sort(list(T)) = list(T).
|
||||
:- pred merge_sort(list(T)::in, list(T)::out) is det.
|
||||
|
||||
:- implementation.
|
||||
|
||||
:- import_module int, exception.
|
||||
|
||||
merge_sort(U) = S :- merge_sort(U, S).
|
||||
|
||||
:- pred merge_sort(list(T)::in, list(T)::out) is det.
|
||||
merge_sort(U, S) :- merge_sort(list.length(U), U, S).
|
||||
|
||||
:- pred merge_sort(int::in, list(T)::in, list(T)::out) is det.
|
||||
|
|
@ -11,7 +24,7 @@ merge_sort(L, U, S) :-
|
|||
( split(H, U, F, B) ->
|
||||
merge_sort(H, F, SF),
|
||||
merge_sort(L - H, B, SB),
|
||||
merge(SF, SB, S)
|
||||
merge_sort.merge(SF, SB, S)
|
||||
; throw(split_error) )
|
||||
; S = U ).
|
||||
|
||||
|
|
@ -26,8 +39,8 @@ merge([], [], []).
|
|||
merge([X|Xs], [], [X|Xs]).
|
||||
merge([], [Y|Ys], [Y|Ys]).
|
||||
merge([X|Xs], [Y|Ys], M) :-
|
||||
( compare(>, A, B) ->
|
||||
merge([X|Xs], Ys, M0),
|
||||
C = [Y|C0]
|
||||
; merge(Xs, [Y|Ys], C0),
|
||||
C = [X|C0] ).
|
||||
( compare(>, X, Y) ->
|
||||
merge_sort.merge([X|Xs], Ys, M0),
|
||||
M = [Y|M0]
|
||||
; merge_sort.merge(Xs, [Y|Ys], M0),
|
||||
M = [X|M0] ).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue