Rudy’s OBTF Rudolf Adamkovič

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))))

© 2025 Rudolf Adamkovič under GNU General Public License version 3.
Made with Emacs and secret alien technologies of yesteryear.