functionshuffle_3(array) { var m = array.length, t, i;
/* While there remain elements to shuffle… */ while (m) {
/* Pick a remaining element… */ i = Math.floor(Math.random() * m--);
/* And swap it with the current element. */ t = array[m]; /* 把当前剩余数组的最后一项拿出来 */ array[m] = array[i]; /* 跟选中的那个项换一下位置 */ array[i] = t; /* 这样就只是做了三次赋值运算而已,复杂度是1 */ }
functionshuffle_4(arr) { /* 改变形参名,在局部作用域内创建arr的副本,要求arr必须严格是个数组 */ var array = arr.slice(0);
var m = array.length, t, i;
/* While there remain elements to shuffle… */ while (m) {
/* Pick a remaining element… */ i = Math.floor(Math.random() * m--);
/* And swap it with the current element. */ t = array[m]; /* 把当前剩余数组的最后一项拿出来 */ array[m] = array[i]; /* 跟选中的那个项换一下位置 */ array[i] = t; /* 这样就只是做了三次赋值运算而已,复杂度是1 */ }
return array; }
###性能对比 测试用一个较长的数组,n=10000。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var arr = []; for(var i=0; i<10000; i++){ arr.push(i); }