Boost C++でSleep sort
Sleep sortについて
ソートしたい対象
t = [8, 2, 4, 5]
があるとする。
tにおけるi番目のt[i]だけsleepさせた後にt[i]を出力するとソートしたことになる。
ただし、全要素に対して同時にsleepをかけなければならない。
ソースコード
Sleep sortをC++のBoostで実装した。
https://gist.github.com/982060
#include <iostream> #include <boost/lexical_cast.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/bind.hpp> #include <boost/thread.hpp> using namespace std; using namespace boost; /* Sleep sort (http://dis.4chan.org/read/prog/1295544154) $ ./slee_sort 8 2 4 5 2 4 5 8 only positive number */ void sleep_and_print(double ms) { this_thread::sleep(posix_time::milliseconds(ms)); cout << ms << endl; } int main(int argc, char *argv[]) { thread_group t; for(int i = 1; i < argc; i++) { double ms; try { ms = lexical_cast<double>(argv[i]); } catch(...) { continue; } t.create_thread(bind(sleep_and_print, ms)); } t.join_all(); }
改良
上記のコードはコメントをいただいて改良したもの
http://twitter.com/#!/cpp_akira/status/71368689248763904
改良点はSleep処理の回避策を無くしたコード