代码之家  ›  专栏  ›  技术社区  ›  Mazen

从列表中的元素创建所有可能的对,然后对它们进行均匀排序

  •  3
  • Mazen  · 技术社区  · 8 年前

    每次按顺序进行一次匹配。 配对内的排序并不重要(a对b==b对a)。

    我在一个简单的嵌套循环中创建配对,在这个循环中,我在玩家上循环,并将当前索引与以下所有索引配对。

    我目前正在将包含配对的数组随机化,但我正在寻找更好的方法。

    2 回复  |  直到 8 年前
        1
  •  3
  •   DAle    8 年前

    你可以使用 Round-robin tournament scheduling algorithm .

    循环赛。所有参赛者都被分配了号码,并且 然后在第一轮配对:

     1  2  3  4  5  6  7
    14 13 12 11 10  9  8    
    

    然后在表的第一列或最后一列(本例中为第一列)中修复一个参与者,然后 将其他部件顺时针旋转一个位置

    第二轮。(1玩13,14玩12,…)

     1 14  2  3  4  5  6
    13 12 11 10  9  8  7 
    

    第三轮。(1打12,13打11,…)

     1 13 14  2  3  4  5
    12 11 10  9  8  7  6    
    

     1  3  4  5  6  7  8
     2 14 13 12 11 10  9
    
        2
  •  0
  •   Riccardo    8 年前

    按顺序保存阵列中的配对,然后按此顺序洗牌

    function shuffle(a) {
    for (let i = a.length; i; i--) {
        let j = Math.floor(Math.random() * i);
        [a[i - 1], a[j]] = [a[j], a[i - 1]];
    }
    

    }

    然后像这样使用

    var myArray = ['1','2','3','4','5','6','7','8','9'];
    shuffle(myArray);
    

    Here