From 5582235bd300f8de997192f9109d596d12df4bbe Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Fri, 16 May 2025 16:54:17 -0700 Subject: Fix spelling of file names --- Sort.sml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Sort.sml (limited to 'Sort.sml') diff --git a/Sort.sml b/Sort.sml new file mode 100644 index 0000000..d9a70e9 --- /dev/null +++ b/Sort.sml @@ -0,0 +1,24 @@ +signature SORT = +sig + val sort : ('a * 'a -> order) -> 'a list -> 'a list +end + +structure Sort :> SORT = +struct + fun merge (_ : 'a * 'a -> order) ([] : 'a list) (l2 : 'a list) : 'a list = l2 + | merge _ l1 [] = l1 + | merge cmp (xl as x :: xs) (yl as y :: ys) = + (case cmp (x, y) of + GREATER => y :: merge cmp xl ys + | _ => x :: merge cmp xs yl) + + fun sort (_ : 'a * 'a -> order) ([] : 'a list) : 'a list = [] + | sort _ [x] = [x] + | sort cmp l = + let + val n = length l + val half1 = List.take (l, n div 2) + val half2 = List.drop (l, n div 2) + in merge cmp (sort cmp half1) (sort cmp half2) + end +end -- cgit v1.3.1