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,343評論 0 0
  • 大家好,我是IT修真院深圳分院第02期學員,一枚正直善良的web程序員。 今天給大家分享一下,修真院官網JS任務0...
    與其感慨路難行閱讀 1,035評論 0 4
  • 最近做音樂播放器,基本功能已實現,準備再寫一個循環播放功能,其中涉及列表循環、單曲循環、隨機循環。實現這幾個功能本...
    _Dot912閱讀 5,664評論 3 6
  • 細雨如絲,煙斜霧橫,花于風摧之中,凋色零落。莫笑少年不知愁,卻堪是,黑發變白頭。如今已把愁看透,奈何,身出其中,心...
    云中的鉛色白閱讀 396評論 0 1