如何生成一个非增长(int)随机数组c#?

时间:2012-02-21 10:47:14

标签: c# arrays random

我正在尝试使用随机数生成一个Integer(int)数组。 例如:3 10 5 9 20 但不是:3 5 9 10 20(因为他们只是成长)

我正在使用带有此代码的Random类(但我总是得到一个增长的列表,如第二个示例中所示):

int[] array1 = new int[5];
Random random_istance = new Random();
for (int i=0;i<5;i++)
{
 array1[i] = random.Next(0,999999);
}

我也试过像(我知道这是一个糟糕的编程)代码:

int[] array1 = new int[5];
Random random_istance = new Random();
for (int i=0;i<5;i++)
{
 random = new Random(x-y*z); // re-instantation
 array1[i] = random.Next(0,999999);    // x,y and z are variable defined outside
}

(*)我的最终目标是在0到999999之间获得一个随机int数组,但有些则不在序列中(因为稍后我将应用算法来对数组进行排序而不会使有意义地订购已经排序的数组。)

此外,我必须创建一个包含DECREASING元素的ANOTHER数组(所以一个随机数组和一个递减数组)。

任何想法如何至少解决第一个问题(*)?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

确保数组不从低到高排序的一种方法是在根据值检测到其排序时随机排序,如:

        // while the array is sorted
        var sortedCopy = array1.ToList();
        sortedCopy.Sort();
        while (array1.SequenceEqual(sortedCopy))
        {
            Array.Sort(array1, new Comparison<int>((left, right) => random.Next(-1, 1)));
        }

答案 1 :(得分:1)

生成后可以随机播放数组:

for (int i = 0; i < array1.Length; i++)
            {
                array1 = array1.OrderBy(c => random_istance.Next()).ToArray();
            }

答案 2 :(得分:0)

好吧,我不知道这是否是一个很好的解决方案,但你可以试试这个:

  1. 创建所需大小的随机数组。
  2. 按升序排序此数组。
  3. 交换随机元素i次,其中i是随机数&gt; 0
  4. 要获得减少的数字,请创建随机数组,然后将其降序排序。


    编辑当然,如果i为偶数,您最终可能会保持顺序不变。我认为交换元素i次就足够了,其中i大于0且奇数。