随机将数组2个元素随机抽取2

时间:2013-02-14 12:01:31

标签: algorithm shuffle

我的问题与编程语言有关,而且可以使用任何语言来解释我。

我有一个阵列,我想以随机方式对其进行随机播放,无论如何,洗牌必须涉及2个元素。 所以,如果我有:

1 2 3 4 5 6 7 8 9 10

1-2,3-4,5-6,等等。必须将这些对混合在一起,例如,导致以下

3 4 7 8 9 10 1 2 5 6

2 个答案:

答案 0 :(得分:1)

它与普通的shuffle相同,只是你将“shuffle数组”视为实际数组的一半大小。含义1,2,3,4,5,6实际上是一个数组1 2, 3 4, 5 6

这是使用fisher yates的一些伪代码:

To shuffle an array a of n elements (indices 0..n-1) in pairs of 2:
  for i from (n − 1) / 2 downto 1 do
       j ← random integer with 0 ≤ j ≤ i
       exchange a[j * 2] and a[i * 2]
       exchange a[j * 2 + 1] and a[i * 2 + 1]

答案 1 :(得分:0)

创建一个包含对的索引的数组,即使用比输入数组小两倍的数组,在其上使用std::random_shuffle(在C++中)然后根据您的更改原始数组辅助数组。