Tu mismo.
A qué llamas " un poquito mas corto"?
Prueba esto:
Código :
function mezclar(bar){
var m= bar.length-1;
for (var i=m;i>1;i--){
alea=Math.floor(i*Math.random());
temp=bar[i];
bar[i]=bar[alea];
bar[alea]=temp;
}
return(bar);
}
Array.prototype.desordenar = function () {
for (var x=0, y=this.length;x<this.length;x++,y--) {
this.push(this.splice(random(y), 1))
}
}
ciclos= 500;
a=[];
for (v=0; v< ciclos; v++){
a[v]=v;
}
T=getTimer();
mezclar(a);
trace("Tiempo con mezclar: "+(getTimer()-T));
T=getTimer();
a.desordenar();
trace("Tiempo con desordenar: "+(getTimer()-T));
Para 100 elementos(ciclos)
mezclar es 20 veces más rápido que
desordenar.
Para 500 elementos
mezclar es 100 veces mas rápido que
desordenar.
Para 2000 elementos
mezclar es 400 veces!! mas rápido que
desordenar.
y la progresion es
GEOMETRICA. para 10000 ciclos puedes pasarte un buen rato esperando, de orden de 40 segundos
........con mezclar para 10000 ciclos 0,3 segundos!!!
Repito: Tu mismo.
Y si lo quieres en prototype ( este es casi el doble de rápido que la función mezclar)
Código :
Array.prototype.desordenar = function () {
var m= this.length-1;
for (var i=m;i>1;i--){
var alea=Math.floor(i*Math.random());
var temp=this[i]; this[i]=this[alea]; this[alea]=temp;
}
}
Este prototype tarda en mi ordenador 2354 ms. en 100.000 ciclos y con mezclar 4215 ms.
El prototype que propones...........simplemente se cuelga.