原生js实现数组随机排列(数组乱序)的方法.【快速洗牌算法】
在开发中遇到这样的问题,需要将一组已知数组的顺序打乱,按照以前和现在的做法,总结了以下方法:
(1)时间复杂度约为 O(n2),splice()方法会遍历一次
function shuffle(a) {
var b = [];
while (a.length > 0) {
var index = parseInt(Math.random() * (a.length - 1));
b.push(a[index]);
a.splice(index, 1);
}
return b;
}(2)时间复杂度为 O(n)
function shuffle(a) {
var len = a.length;
for (var i = 0; i < len - 1; i++) {
var index = parseInt(Math.random() * (len - i));
var temp = a[index];
a[index] = a[len - i - 1];
a[len - i - 1] = temp;
}
}(3)Array.prototype.sort 随机算法【慎用】
function shuffle(arr){
return arr.sort(function(){
return Math.random() - 0.5;
});
}该方法看似巧妙利用了 Array.prototype.sort 实现随机,但是结果发现:各个位置的平均值越往后越大,这意味着这种随机算法越大的数字出现在越后面的概率越大。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!