c – 如何对数组进行混洗,以便所有元素都改变它们的位置

前端之家收集整理的这篇文章主要介绍了c – 如何对数组进行混洗,以便所有元素都改变它们的位置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要改组一个数组,以便所有数组元素都应该改变它们的位置.
给定一个数组[0,1,2,3]可以得到[1,3,2]或[3,1]而不是[3,0](因为2保持不变).
我想算法不是特定于语言的,但为了以防万一,我需要它在C程序中(由于额外的要求,我不能使用std :: random_shuffle).

解决方法

For each element e
    If there is an element to the left of e
        Select a random element r to the left of e
           swap r and e

这可以保证每个值不在它开始的位置,但不保证每个值在重复时都会改变.

BeeOnRope注意到虽然简单,但这是有缺陷的.给定列表[0,3],该算法不能产生输出[1,2].

猜你在找的C&C++相关文章