Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.29 KB | None | 0 0
  1. (define (merge-vectors a b)
  2.   (merge-loop a b (make-vector (+ (vector-length a) (vector-length b))) 0 0 0))
  3.  
  4. (define (merge-loop a b c i j k)
  5.   (cond
  6.     [(and (>= i (vector-length a)) (>= j (vector-length b))) c]
  7.     [(>= i (vector-length a)) (vector-set! c k (vector-ref b j)) (merge-loop a b c i (+ j 1) (+ k 1))]
  8.     [(>= j (vector-length b)) (vector-set! c k (vector-ref a i)) (merge-loop a b c (+ i 1) j (+ k 1))]
  9.     [#t (if (<= (vector-ref a i) (vector-ref b j))
  10.             (begin (vector-set! c k (vector-ref a i)) (merge-loop a b c (+ i 1) j (+ k 1)))
  11.             (begin (vector-set! c k (vector-ref b j)) (merge-loop a b c i (+ j 1) (+ k 1))))] ))
  12.  
  13.  
  14.  
  15.  
  16.  
  17. (define (merge-sort array)
  18.   (if (< (vector-length array) 2)
  19.       array
  20.       (let [(left  (merge-sort (copy-part array 0 (div (vector-length array) 2))))
  21.             (right (merge-sort (copy-part array (div (vector-length array) 2) (vector-length array))))]
  22.         (merge-vectors left right))))
  23.  
  24.  
  25. (define (copy-part array i j)
  26.   (let ([copy (make-vector (- j i))])
  27.     (copy-part-loop array i copy 0)
  28.     copy))
  29.  
  30. (define (copy-part-loop from i to k)
  31.   (when (< k (vector-length to))
  32.       (vector-set! to k (vector-ref from i))
  33.       (copy-part-loop from (+ i 1) to (+ k 1))))
  34.  
  35.  
  36. (display (merge-sort (make-vector 0 )))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement