常識を覆すソートアルゴリズムSleep sortサイボウズ・ラボ/ Shibuya.pm竹迫 良範  @TAKESAKO
2009/04/06Cybozu University2
常識を覆すソートアルゴリズム Sleep sort#!/bin/bashfunction f() {    sleep "$1" && echo "$1"}while [ -n "$1" ]do    f "$1" &    shiftdonewait実行方法$ ./sleepsort.bash 5 4 3 2 1
2009/04/06Cybozu University44ch BBS
2009/04/06Cybozu University5
2009/04/06Cybozu University6
2009/04/06Cybozu University7
2009/04/06Cybozu University8
2009/04/06Cybozu University9package mainimport (    "os"    "strconv"    "syscall")func main() {args := os.Args[1:]    done := make(chan int64)    for _, arg := range args {        i, _ := strconv.Atoi64(arg)        go func(i int64) {syscall.Sleep(i * 1e9)            done <- i        }(i)    }    for _ = range args {println(<-done)    }}
2009/04/06Cybozu University10setTimeoutでSleep sort を実装してみた
JavaScript版 Sleep sort(1000ミリ秒単位)function sleep_sort(a) {   for(var i = 0; i < a.length; i++){      callback( a[i] );   }   function callback(n) {setTimeout( function(){ document.body.innerHTML+= n + "<br>\n";      }, n * 1000)   }}実行方法sleep_sort([5,4,3,2,1,0]);
ブラウザで実際に動かしてみるsetTimeout(f, n * 1000) バージョン
高速 JavaScript版 Sleep sort(1ミリ秒単位)function sleep_sort(a) {   for(var i = 0; i < a.length; i++){      callback( a[i] );   }   function callback(n) {setTimeout( function(){ document.body.innerHTML+= n + "<br>\n";      }, n* 1)   }}実行方法sleep_sort([11,12,5,4,3,13,2,1,0,9,8,7,6,10]);
本当に動くのかブラウザで実際に動かしてみるsetTimeout(f, n * 1) ミリ秒バージョン
手元の環境で setTimeoutの分解能を調べてみた※タブの表・裏やOSなど環境によって差があります
※ クロスブラウザ対応とはこういうこと?setTimeout(f, (n+5) * 2) ミリ秒バージョン
2009/04/06Cybozu University17Node.js
Node.js 版 Sleep sort(10ピコ秒単位)function sleep_sort(a) {   for(var i = 0; i < a.length; i++) {      callback( a[i] );   }   function callback(n) {setTimeout( function(){ console.log(n); }               , (n+1) * 1e-8)   }}sleep_sort(process.argv.slice(2));実行方法$ node sort.js 5 4 3 2 1 0
Node.js の setTimeout分解能(およそ)※タブの表・裏やOSなど環境によって差があります
2009/04/06Cybozu University20Node.js最速伝説

Node.js - sleep sort algorithm