棋牌游戏中的洗牌算法

第一种:

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

 


版权声明:本文为qq_40140218原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。