Home / Computer science / Merge sort / Practice implementation
Merge sort
(defun my-merge-sort (list)
"Return a sorted copy of LIST."
(if (< (seq-length list) 2) list
(let ((halves (my-merge-sort-split list)))
(my-merge-sort-merge (my-merge-sort (nth 0 halves))
(my-merge-sort (nth 1 halves))))))
(ert-deftest my-merge-sort ()
(should (equal (my-merge-sort '()) '()))
(should (equal (my-merge-sort '(1)) '(1)))
(should (equal (my-merge-sort '(1 2)) '(1 2)))
(should (equal (my-merge-sort '(2 1)) '(1 2)))
(should (equal (my-merge-sort '(1 2 3)) '(1 2 3)))
(should (equal (my-merge-sort '(1 3 2)) '(1 2 3)))
(should (equal (my-merge-sort '(2 1 3)) '(1 2 3)))
(should (equal (my-merge-sort '(2 3 1)) '(1 2 3)))
(should (equal (my-merge-sort '(3 1 2)) '(1 2 3)))
(should (equal (my-merge-sort '(3 2 1)) '(1 2 3)))
(should (equal (my-merge-sort '(1 2 3 4)) '(1 2 3 4)))
(should (equal (my-merge-sort '(4 3 2 1)) '(1 2 3 4))))