home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-01-28 | 683 b | 30 lines | [TEXT/gamI] |
- ; Sort using mergesort
- ;
- ; (sort '(6 2 8 4 1) <) ==> (1 2 4 6 8)
-
- (define (sort l <?)
-
- (define (mergesort l)
-
- (define (merge l1 l2)
- (cond ((null? l1) l2)
- ((null? l2) l1)
- (else
- (let ((e1 (car l1)) (e2 (car l2)))
- (if (<? e1 e2)
- (cons e1 (merge (cdr l1) l2))
- (cons e2 (merge l1 (cdr l2))))))))
-
- (define (split l)
- (if (or (null? l) (null? (cdr l)))
- l
- (cons (car l) (split (cddr l)))))
-
- (if (or (null? l) (null? (cdr l)))
- l
- (let* ((l1 (mergesort (split l)))
- (l2 (mergesort (split (cdr l)))))
- (merge l1 l2))))
-
- (mergesort l))
-