注意: sleep sort は、あくまでもネタです。ネタとして楽しんでください。
コメント欄でも指摘されてますが、実用に耐えるものではありません。
間違っても実用しようとか思わないように!
一部で話題沸騰中のソートアルゴリズム「sleep sort」を jQuery 用プラグインとして実装してみました。
via. 常識を覆すソートアルゴリズム!その名も"sleep sort"! – Islands in the byte stream
とりあえず、デモ。
下の textarea に数値をスペース区切りで入力してから「Sleep Sort!」をクリックしてください。
ソートされるはずです。
ソースはこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 | jQuery.fn.sleep_sort = function () { var t = jQuery( this ); var a = t.val().replace(/[^\s\d]/, '' ).split(/[\s]/); t.val( '' ); jQuery(a).each( function (){ setTimeout(( function (num){ return function (){ t.val(t.val() + (t.val() !== '' ? ' ' : '' ) + num.toString()); }; })( this ), Number( this )); }); } |
これで $('#sleepsort').sleep_sort();
とかってやると実行できますよ。
これは信用できないソートです
なぜなら遅延並列処理を数ミリ秒程度の差で実行した場合、高負荷時に容易に実行順序が逆転してしまうからです
このソートだけをテストしている時にはまず問題は起きないでしょうが、実際アプリケーションに組み込むとかなりたちの悪いバグになってしまいます
特に実行環境が多彩で、比較的実行速度が不安定なJavaScriptのような言語で実装することは間違っても避けなければなりません
これは並列処理の危険性を無視したとても悪い見本です
名無しさん、はじめまして。
あー、すいません。
リンク先見てもらうと分かるんですが、この sleep sort はネタ的な面白さがあるだけで実用にはならないものです
僕も、こんなんが実用になるとは思ってませんし、実際のアプリケーションに使おうとも思ってません。
本文中に「ネタ」とか書いておけば良かったっすね。申し訳ない。
ピンバック: Sleep sortの各言語での実装まとめ – Yuyak