在c+中随机交换数组中的两个元素+; 是否有任何方法在C++中随机地交换数组中的两个元素(两个不同的索引)?我的想法是随机选择第一个索引,然后随机选择第二个索引,直到第二个索引与第一个索引不同。然后交换这两个元素。我想知道有没有更好的办法

在c+中随机交换数组中的两个元素+; 是否有任何方法在C++中随机地交换数组中的两个元素(两个不同的索引)?我的想法是随机选择第一个索引,然后随机选择第二个索引,直到第二个索引与第一个索引不同。然后交换这两个元素。我想知道有没有更好的办法,c++,arrays,random,C++,Arrays,Random,我认为这与随机洗牌不同,因为每次我只想交换数组中的两个元素,并保持其他元素的原始顺序 是,从[0…N-1]中选择两个数字第一个,从[0…N-2]中选择第二个。如果第一个是,从[0…N-1]中选择两个第一个,从[0…N-2]中选择两个第二个。如果首先这里有一个基于@MSalters建议的解决方案: int first = randInt(myArray.size()-1); int second = randInt(myArray.size()-1); while (first == second

我认为这与随机洗牌不同,因为每次我只想交换数组中的两个元素,并保持其他元素的原始顺序

是,从
[0…N-1]
中选择两个数字
第一个
,从
[0…N-2]
中选择第二个。如果
第一个
是,从
[0…N-1]
中选择两个
第一个
,从
[0…N-2]
中选择两个
第二个
。如果
首先
这里有一个基于@MSalters建议的解决方案:

int first = randInt(myArray.size()-1);
int second = randInt(myArray.size()-1);
while (first == second) {
    second = randInt(myArray.size()-1);
}
char firstLetter = letters[first];
char secondLetter = letters[second];
myArray[first] = secondLetter;
myArray[second] = firstLetter;

以下是一个基于@MSalters建议的解决方案:

int first = randInt(myArray.size()-1);
int second = randInt(myArray.size()-1);
while (first == second) {
    second = randInt(myArray.size()-1);
}
char firstLetter = letters[first];
char secondLetter = letters[second];
myArray[first] = secondLetter;
myArray[second] = firstLetter;

@Z字形斑马是个好主意!:)你能说说这意味着什么吗?选择更好的方法可能部分取决于此随机交换的作用。这是一次性的吗?免费提示:@ZigZagZebra是个好主意!:)你能说说这意味着什么吗?选择更好的方法可能部分取决于此随机交换对您的帮助。这是一次性的吗?免费提示:为什么
首先从[0…N-1]中选择第一个,从[0…N-2]中选择第二个如何。如果First==Second,++Second?@zigzagrano。它将在第一个之后聚集,而不会拾取最后一个。我们实际上需要if(second>=first)+second;按照您的方式,如果有11个元素,则有20%的几率交换连续条目。假设您有N=10,那么
First
0-9
运行。想象一下你选了5个。你知道还有
9
元素可以从中选择
Second
0-4
6-9
。现在,您可以选择一个数字
0-8
,并通过添加一个数字将子范围
5-8
映射到
6-9
。如果您使用了
=,交换5和6的几率是原来的两倍,交换5和9的几率是0%。@MSalters我明白了。谢谢为什么
First从[0…N-1]中选择第一个,从[0…N-2]中选择第二个如何。如果First==Second,++Second?@zigzagrano。它将在第一个之后聚集,而不会拾取最后一个。我们实际上需要if(second>=first)+second;按照您的方式,如果有11个元素,则有20%的几率交换连续条目。假设您有N=10,那么
First
0-9
运行。想象一下你选了5个。你知道还有
9
元素可以从中选择
Second
0-4
6-9
。现在,您可以选择一个数字
0-8
,并通过添加一个数字将子范围
5-8
映射到
6-9
。如果您使用了
=,交换5和6的几率是原来的两倍,交换5和9的几率是0%。@MSalters我明白了。谢谢