使用随机整数快速填充数组

时间:2014-07-22 03:03:33

标签: java arrays

我的导师希望我们用25,000个随机变量填充数组,以便我们对它们进行排序。

这是他提问的第一部分:

  
      
  1. 随机生成至少25,000个整数(键)的数据集[1-99,000范围内的整数值]并存储数据集   一个名为unsorted_Array的整数数组,大小= 25,000,并保存   另一个副本到另一个名为sorted_Array的数组,大小= 25,000   [注意:一步填充两个数组]。
  2.   

这就是我对代码所拥有的:

Random rand1 = new Random ();

int [] unsorted_Array = new int [25000];
int [] sorted_Array = new int [25000];

for (int i = 0; i < 25000; i++)
{
    unsorted_Array[i] = rand1.nextInt(max);
    sorted_Array[i] = rand1.nextInt(max);
}

问题是填充数组需要花费很长时间。我想知道是否有一种方法可以快速生成25,000个整数,因为这个作业有更多的部分。

编辑:因为我无法解释我只是要发布所有需要做的事情(抛出第一个原因得到了解释):

  1. 使用Quick-Sort [我们在课堂上讨论 - 检查幻灯片中的代码]对数据(键)进行排序并将结果保存在sorted_Array中[在代码中包含排序算法]

    此时你应该有2个整数数组,原始 - 未排序和排序数组。

  2. 从unsorted_Array中随机选取100个元素(键),并将它们存储在名为keys_Array的新整数数组中。 [这样做我们确保找到所有键,我们的二进制搜索功能可能会返回索引] 对于key_Array中的每个元素(键),您需要执行以下操作: [使用数组存储您收集的统计信息]

    1. 使用顺序搜索算法搜索unsorted_Array中的元素并记录以下内容:

      • 记录找到元素(键)的索引。
      • 在unsorted_Array中找到元素所需的时间[使用时间函数计算时间]
    2. 使用二进制搜索算法搜索unsorted_Array中的元素并记录以下内容:

      • 记录找到元素(键)的索引[如果找不到结果则索引= -1]
      • 在unsorted_Array
      • 中找到[或未找到]元素所需的时间
    3. 使用顺序搜索算法搜索sorted_Array中的元素并记录以下内容:

      • 记录找到元素(键)的索引[如果找不到结果则索引= -1]
      • 在sorted_Array
      • 中找到[或未找到]元素所需的时间
    4. 使用二进制搜索算法搜索sorted_Array中的元素并记录以下内容:

      • 记录找到元素(键)的索引[如果找不到结果则索引= -1]
      • 在sorted_Array
      • 中找到[或未找到]元素所需的时间
    5. 计算两种算法在两种情况下(即在排序数组和未排序数组中)定位单个键所花费的平均时间(以纳秒为单位 - 1秒= 1 000 000 000纳秒(十亿))。

  3. 提前致谢!!

3 个答案:

答案 0 :(得分:0)

试试这个

int [] unsorted_Array = new int [25000];

for(int i : unsorted_Array){
    i = rand1.nextInt(max)
}

int [] sorted_Array = unsorted_Array.clone();

答案 1 :(得分:0)

尝试下面的代码,通过消除第二个数组的额外随机数生成来减少您的时间。此外,将为这两个阵列分1步执行复制数组。 (如您的导师所述)。最后,您可以对sorted_array进行排序,如下所示。

Random rand1 = new Random ();

int [] unsorted_Array = new int [25000];
int [] sorted_Array = new int [25000];

for (int i = 0; i < 25000; i++)
{
    int newRandVal = rand1.nextInt(max);
    unsorted_Array[i] = newRandVal;
    sorted_Array[i] = newRandVal;
}
Arrays.sort(sorted_array);

答案 2 :(得分:0)

  

问题是填充数组需要花费很长时间。

代码非常优秀,应该运行得非常快。 (在一瞬间......)所以,我怀疑缓慢的来源实际上是你程序中的其他地方。

教训:不要妄下结论,尤其是与绩效相关的问题。


但是如果真的很慢,那么最可能的(IMO)问题是随机数生成器花费很长时间来获取随机种子。这意味着您的操作系统收集“熵”的方式有些奇怪。 (我已经看到这种情况发生在虚拟机上,由于虚拟化,“熵收集”机制无法正常工作......)

简单的解决方法是自己为随机数生成器提供种子; e.g。

Random rand1 = new Random(123456);  // or something.