Download code

Jump to: navigation, search

Back to Merge_sort_(Lisp)

Download for Windows: single file, zip

Download for UNIX: single file, zip, tar.gz, tar.bz2

mergesort.lisp

 1 ; The authors of this work have released all rights to it and placed it
 2 ; in the public domain under the Creative Commons CC0 1.0 waiver
 3 ; (http://creativecommons.org/publicdomain/zero/1.0/).
 4 ; 
 5 ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 6 ; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 7 ; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 8 ; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 9 ; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10 ; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
11 ; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 ; 
13 ; Retrieved from: http://en.literateprograms.org/Merge_sort_(Lisp)?oldid=19177
14 
15 (defun merge-sort (list)
16   (if (small list) list
17 	  (merge-lists
18 		(merge-sort (left-half list))
19 		(merge-sort (right-half list)))))
20 
21 (defun small (list)
22   (or (eq (length list) 0) (eq (length list) 1)))
23 (defun right-half (list)
24   (last list (ceiling (/ (length list) 2))))
25 (defun left-half (list)
26   (ldiff list (right-half list)))
27 (defun merge-lists (list1 list2)
28   (merge 'list list1 list2 #'<))


hijacker
hijacker
hijacker
hijacker