Advertisement
osipyonok

Untitled

Mar 27th, 2018
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.65 KB | None | 0 0
  1. ; bubble sort begin
  2. (defun bubble_sort (lst)
  3.     (if (<= (length lst) 1)
  4.         (return-from bubble_sort lst))
  5.        
  6.     (loop for i from 0 to (- (length lst) 2)
  7.         do (       
  8.             if (> (elt lst i) (elt lst (+ i 1)))
  9.             (rotatef
  10.                 (elt lst i)
  11.                 (elt lst (+ i 1))
  12.             )
  13.         )
  14.     )
  15.    
  16.     (return-from bubble_sort
  17.         (append
  18.             (bubble_sort
  19.                 (subseq lst 0 (- (length lst) 1))
  20.             )
  21.             (last lst)
  22.         )
  23.     )
  24. )
  25.  
  26. (write (bubble_sort '(1 3 15 4 5 3 7 2 21 13 12 1 -1)))
  27. (terpri)
  28. (write (bubble_sort '(15 4 5)))
  29. (terpri)
  30. (write (bubble_sort '(15 4)))
  31. (terpri)
  32. (write (bubble_sort '(15)))
  33. ; bubble sort end
  34.  
  35. ; merge sort begin
  36. (defun merge_sort (lst)
  37.   (defun merge_lists (list1 list2)
  38.     (cond
  39.       ((= (length list1) 0) list2)
  40.       ((= (length list2) 0) list1)
  41.       ((< (car list1) (car list2))
  42.         (append
  43.           (list (car list1))
  44.           (merge_lists (cdr list1) list2)
  45.         )
  46.       )
  47.       ((> (car list1) (car list2))
  48.         (append
  49.           (list (car list2))
  50.           (merge_lists (cdr list2) list1)
  51.         )
  52.       )
  53.       ((= (car list1) (car list2))
  54.         (append
  55.           (list (car list1) (car list2))
  56.           (merge_lists (cdr list1) (cdr list2))
  57.         )
  58.       )
  59.     )
  60.   )
  61.  
  62.   (let ((len (length lst)))
  63.     (cond
  64.       ((<= len 1) lst)
  65.       (t
  66.         (merge_lists
  67.           (merge_sort (subseq lst 0 (ceiling (/ len 2))))
  68.           (merge_sort (subseq lst (ceiling (/ len 2))))
  69.         )
  70.       )
  71.     )
  72.   )
  73. )
  74.  
  75. (write (merge_sort '(1 3 15 4 5 3 7 2 21 13 12 1 -1)))
  76. (terpri)
  77. (write (merge_sort '(15 4 5)))
  78. (terpri)
  79. (write (merge_sort '(15 4)))
  80. (terpri)
  81. (write (merge_sort '(15)))
  82. ; merge sort end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement