首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 洗牌算法解析:used_cards 數組與 good_card 標誌位的作用

     編輯:程式設計綜合問答

代碼邏輯解讀

var used_cards = []; // 記錄已發出的牌的索引
function hit() {
    var good_card = false;
    do {
        var index = getRandom(52); // 0-51 隨機索引
        if ($.inArray(index, used_cards) == -1) { // 未使用過
            good_card = true;
            var c = deck[index]; // 取到牌
            used_cards[used_cards.length] = index; // 記錄已用索引(等同 push)
        }
    } while (!good_card); // 直到找到未用過的牌
    good_card = false; // 重置標誌供下次調用
}

關鍵點

  • used_cards.length 初始為 0,used_cards[0] = index 即在末尾添加,等價 push(index)。
  • good_card 作為「找到可用牌」的標誌,控制 do-while 循環終止。
  • 整體實現「無放回隨機抽樣」,模擬洗牌發牌。

改進建議

若牌數固定 52,Fisher-Yates 洗牌算法(O(n) 一次性打亂數組,再順序取牌)效率更高、代碼更簡潔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved