Advertisement
kevindaprah

LOCAL MERGE-LIST-ORDER

Aug 21st, 2019
991
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 0.76 KB | None | 0 0
  1. #lang racket
  2.  
  3. (define (merge-lists xs ys)
  4.   (cond
  5.     [(null? xs) ys]
  6.     ;if xs is empty, return ys
  7.     [(null? ys) xs]
  8.     ;if ys is empty, return xs
  9.     [(< (car xs) (car ys))
  10.     ;if the head of list "xs" is bigger than head of list "ys"
  11.      (cons (car xs) (merge-lists (cdr xs) ys))]
  12.      ;cons head xs to (recurse)
  13.     [#t ;I use true as an else cond here - possibly bad style?
  14.      (cons (car ys) (merge-lists xs (cdr ys)))]))
  15.      ;cons head ys to (recurse)
  16.  
  17. (define (merge-sort xs)
  18.   (cond
  19.     [(or (null? xs) (null? (cdr xs))) xs]
  20.     [(null? (cddr xs))
  21.      (merge-lists (list (car xs)) (cdr xs))]
  22.     [#t
  23.      (let ([x (ceiling (/ (length xs) 2))])
  24.        (merge-lists (merge-sort (take xs x))
  25.                     (merge-sort (drop xs x))))]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement