解いた問題

5/20/2011

sleep sort in clojure

話題のSleepSortを描いてみた。

やることは、
・配列の要素と同じ数のスレッドを作る。
・各スレッドは、1つの整数を受け取り、その時間だけsleepする。
・数字を返す。

wait() ==>> notifyAll() ==>> sleep() で実現したかったけど、やり方がよく分からない。
notifiAllしないと微妙に順番が変わる可能性がある? いや、したとしても、変わるか?
とりあえず、sleepする時間を10倍。
(defn sleep-sort [ a ]
  (if (not (empty? a))
    (do
      (.start (Thread.
               (fn []
                 (Thread/sleep (* (first a) 10))
                 (println (first a)))))
      (sleep-sort (rest a)))))

(sleep-sort '(6 1 2 3 7 4 8 9 5 0))
参考サイト
4chan BBS – Genius sorting algorithm: Sleep sort

0 件のコメント :

コメントを投稿