クイックソート

バブルソート(id:thata:20050302#1109724669)の次はクイックソート

途中、remove-if (非破壊的メソッド)とdelete-if (破壊的メソッド)を間違えて30分くらい悩む。同じ罠にかかったことがある人はオレだけじゃないはず、と思いたい。

;;(qsort '(2 1 3))
;; => (1 2 3)
(defun qsort (lst)
  (if (null lst)
      nil
    (let *1 lst))

(defun select-greater-equal (n lst)
  (remove-if-not (lambda (x) (>= x n)) lst))

*1:pivot (car lst) ) ) (append (qsort (select-less pivot (cdr lst))) (cons pivot (qsort (select-greater-equal pivot (cdr lst)))))))) (defun select-less (n lst) (remove-if-not (lambda (x) (< x n