第一种:
在Java标准库中,有一个洗牌算法,大概的逻辑就是,依次拿出一张牌,然后再随机挑选一张与这一张的位置互换。
随机交换两个位置,共交换n次,n越大,越接近随机”。
这个做法是不对的,就算n很大(例如10张牌,进行10次调换),也还存在很大可能“有的牌根本没换位置”。
顺着这个思路,做一点小调整就可以了:第i张与任意一张牌换位子,换完一轮即可。
话不多说,代码出世
function shuffle(arr) {
for(var i = 0; i < arr.length; ++i) {
var index = Math.floor(Math.random() * arr.length);
var t = arr[index];
arr[index] = arr[i];
arr[i] = t;
}
}
第二种:
网狐棋牌的一种洗牌算法
function shuffle(arr) {
arr.sort(function (a, b) {
return Math.random() > 0.5 ? -1 : 1;
});
}