棋牌游戏中的洗牌算法

第一种:

在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;
    });
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值