2014年7月19日土曜日

クイックっぽいソート

Web上をいろいろ見ていたら、Hskellの5行のクイックソートというのがあるみたいで、Pythonでも書いてみました。 Quickソートが何をやっているのかを書き記したようなものみたいになっています。

def qlikesort(data):
    if len(data) < 1: return data
    smaller = [x for x in data[1:] if x < data[0]]
    larger = [x for x in data[1:] if x >= data[0]]
    return qlikesort(smaller) +[data[0]]+ qlikesort(larger)

pythonでもそんなに長くならないですね。
CLISPでも動くように、一対一で書き直してみると、

(defun qlike-sort (s)
  (if (null s) 
      nil 
      (let ((smaller (remove-if (lambda (x) (>= x (car s))) (cdr s)))
            (larger  (remove-if (lambda (x) (<  x (car s))) (cdr s))))
           (concatenate 'list (qlike-sort smaller) (list (car s)) (qlike-sort larger)))))

当たり前ですが、あまり変わらないですね。

0 件のコメント: