Array comprehensionsでクイックソート
JavaScript1.7からgeneratorとそれを使ったArray comprehensionsが使えるようになっているらしい。ということでとりあえずクイックソートを作ってみた。
// クイックソート! function sort(list) { if ( list.length <= 1 ) { return list; } return sort([i for (i in each(list) ) if (i < list[0])]) .concat( list[0] ) .concat( sort([i for (i in each(list) ) if (i >= list[0])]) ); } function each( list ) { for (var i = 1; i < list.length; i++) { yield list[i]; } }
実行結果です。
var list = [1,9,4,8,7,5,4,9,3,0,1,2,8,3]; stdout.innerHTML += sort( list ).join(","); // 0,1,1,2,3,3,4,4,5,7,8,8,9,9
実行してみる。※FireFox2のみで確認。IE6では動作しませんでした。
rubyのContinuationっぽい動きだなー。処理の途中でUIを更新したい時とかに使えそう。IEで動かないのが痛い。
参考: