原生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 实现随机,但是结果发现:各个位置的平均值越往后越大,这意味着这种随机算法越大的数字出现在越后面的概率越大。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!