Saturday, March 5, 2011

Schemeでクイックソート

バブルソートを作ったからには、もちろんクイックソート(quick sort)も作らないとね。
(define (cat l1 l2)
  (cond ((null? l1) l2)
        (else (cons (car l1)(cat (cdr l1) l2)))))

(define (q-sort li)
  (define (split in lo hi mp)
    (cond ((null? in)(cat (q-sort lo)(cons mp (q-sort hi))))
          ((> mp (car in))(split (cdr in)(cons (car in) lo) hi mp))
          (else (split (cdr in) lo (cons (car in) hi) mp))))
  (cond ((null? li) li)
        (else (split (cdr li) '() '() (car li)))))

昨日のバブルソートよりはだいぶ見やすいプログラムになってる。
まあ昨日は酒が入ってたしね。

No comments: