js 洗牌算法

参考
如何测试洗牌程序
Fisher–Yates shuffle 洗牌算法
随机洗牌算法
洗牌算法shuffle
如何为德扑圈设计洗牌算法

迭代步骤演示

1.倒序循环这个数组
2.取范围从1到n的随机数k
3.k与n交换
4.直到循环至数组的首个元素

/**
 * Fisher–Yates shuffle
 */
Array.prototype.shuffle = function() {
    var input = this;

    for (var i = input.length-1; i >=0; i--) {

        var randomIndex = Math.floor(Math.random()*(i+1));
        var itemAtIndex = input[randomIndex];

        input[randomIndex] = input[i];
        input[i] = itemAtIndex;
    }
    return input;
}

使用方式也很简单,直接用数组调用这个方法即可

[1,2,3,4,5,6,7,8].shuffle()
//[4, 6, 3, 2, 5, 1, 7, 8] // 每次结果都是随机的
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 终于可以开始 Collection Functions 部分了。 可能有的童鞋是第一次看楼主的系列文章,这里...
    韩子迟阅读 2,224评论 5 16
  • 今天给大家分享一下:洗牌算法具体指的是什么。 一、背景介绍 洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常...
    slashnie阅读 3,345评论 0 0
  • 大家好,我是IT修真院深圳分院第02期学员,一枚正直善良的web程序员。 今天给大家分享一下,修真院官网JS任务0...
    与其感慨路难行阅读 1,035评论 0 4
  • 最近做音乐播放器,基本功能已实现,准备再写一个循环播放功能,其中涉及列表循环、单曲循环、随机循环。实现这几个功能本...
    _Dot912阅读 5,669评论 3 6
  • 细雨如丝,烟斜雾横,花于风摧之中,凋色零落。莫笑少年不知愁,却堪是,黑发变白头。如今已把愁看透,奈何,身出其中,心...
    云中的铅色白阅读 396评论 0 1