给定一个元素列表,是否存在一种改组算法可以保证最终选定的一半部分在一侧,其余部分在另一侧?

例子:
{ 4, 3, 10, 7, 2, 9, 6, 8, 1, 5 }

鉴于上面的设置,我想要一个混合算法,最终将标记的向左移动,即使算法本身不知道什么是“标记”的,什么不是。

{ 4, 3, 10, 7, 2, 9, 6, 8, 1, 5 }
X X X X X

可接受的结果是:
{ 4, 10, 9, 6, 1, 3, 7, 2, 8, 5 }
{ 1, 9, 10, 4, 6, 2, 8, 5, 7, 3 }
{ 1, 4, 9, 10, 6, 3, 7, 5, 8, 2 } 等

难点:算法不应该使用随机数来混合内容,它应该是一个迭代过程。所以Fisher-Yates出局了。

最佳答案

std::next_permutation() 会是你想要的吗? (因为它创建了所有可能的排列,它最终也会把标记的一次放在左边。)

关于c++ - 如何在没有随机性的情况下打乱列表,并保证一部分元素最终会出现在一侧?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3299918/

10-12 04:24