�ʤ�ۤɡ�Schwartzian Transform�ΰճ�������ˡ���ʤ���
snippets from shinichitomita��s journal - JavaScript�������sort�ؿ��ǥ���åե뤹��Array.prototype.shuffle = function() { return this.map(function(a){ return { weight: Math.random(), value: a } }) .sort(function(a, b){ return a.weight - b.weight }) .map(function(a){ return a.value }); }
�Ǥ⡢�����ǤϤɤ���������Ĵ�٤Ƥߤ���
�����Ǥϡ����ǿ�10000�򥷥�åե뤹����֤��¬���Ƥ��롣
Fisher-Yates
�ޤ��ϡ�Fisher-Yatesˡ�������ɤ���®���󥿡��ե���������� :: ����JavaScript������򥷥�åե뤹����ˡ��ե���������ۤܤ��Τޤޡ�
MacBook Pro���Safari�Ǥ�Firefox 1.5�Ǥ⡢0.1�äȤ�����ʤ���
Array.prototype.shuffle_fy = function() { var i = this.length; while(i){ var j = Math.floor(Math.random()*i); var t = this[--i]; this[i] = this[j]; this[j] = t; } return this; }
Schwartzian Transform (Original)
���ˡ�snippets from shinichitomita��s journal - JavaScript�������sort�ؿ��ǥ���åե뤹�����Τޤޡ������Schwartzian Transform�Ǥ�Ϣ������ǤϤʤ������Ȥ��Τ����ɡ�������������狼��䤹���Ȥ����Ф狼��䤹����
Safari�Ǥ�2�ü�ۤɤ����ä���
Array.prototype.shuffle_sto = function() { return this.map(function(a){ return { weight: Math.random(), value: a } }) .sort(function(a, b){ return a.weight - b.weight }) .map(function(a){ return a.value }); }
�ʤ���Array.map��Safari�ˤ��������Ƥ��ʤ��ä��Τǡ��ʲ��Τ褦�ˤ��Ƥ��롣
if (! Array.prototype.map ){ Array.prototype.map = function(f){ var a = []; for(var i = 0; i < this.length; i++){ a[i] = f(this[i]); } return a; } }
Schwartzian Transform (via Array)
�����Ƥ����餬��ľ��Schwartzian Transform��
Safari�Ǥ��ܶᤤ®�٤��Ф�Τ����ɡ�Firefox�ǤϹ�®���ϸ������ϰϤ��ä���������ˤ���1�ðʾ夫���롣
Array.prototype.shuffle_sta = function() { return this.map(function(a){ return [a, Math.random()] }) .sort(function(a, b){ return a[1] - b[1] }) .map(function(a){ return a[0] }); }
����
���Τ褦�ˡ�Schwartzian Transform�ϡ������ɤ��狼��䤹����ΤΡ�20�ܤˤ����®�ٺ������롣�ѻ��˻Ȥ��ΤǤ�����򤱤�٤����⤷��ʤ���
Dan the Array Shuffler
��Ӵؿ��˥������Ȥä���硢
�Х֥륽���Ȥϱʱ�˽����ʤ���ǽ��������ޤ��͡�
�����⽪��ä��Ȥ��ˤϥ����Ȥ���Ƥ���:-P