我的导师希望我们用25,000个随机变量填充数组,以便我们对它们进行排序。
这是他提问的第一部分:
- 随机生成至少25,000个整数(键)的数据集[1-99,000范围内的整数值]并存储数据集 一个名为unsorted_Array的整数数组,大小= 25,000,并保存 另一个副本到另一个名为sorted_Array的数组,大小= 25,000 [注意:一步填充两个数组]。
醇>
这就是我对代码所拥有的:
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个整数,因为这个作业有更多的部分。
编辑:因为我无法解释我只是要发布所有需要做的事情(抛出第一个原因得到了解释):
使用Quick-Sort [我们在课堂上讨论 - 检查幻灯片中的代码]对数据(键)进行排序并将结果保存在sorted_Array中[在代码中包含排序算法]
此时你应该有2个整数数组,原始 - 未排序和排序数组。
从unsorted_Array中随机选取100个元素(键),并将它们存储在名为keys_Array的新整数数组中。 [这样做我们确保找到所有键,我们的二进制搜索功能可能会返回索引] 对于key_Array中的每个元素(键),您需要执行以下操作: [使用数组存储您收集的统计信息]
使用顺序搜索算法搜索unsorted_Array中的元素并记录以下内容:
使用二进制搜索算法搜索unsorted_Array中的元素并记录以下内容:
使用顺序搜索算法搜索sorted_Array中的元素并记录以下内容:
使用二进制搜索算法搜索sorted_Array中的元素并记录以下内容:
计算两种算法在两种情况下(即在排序数组和未排序数组中)定位单个键所花费的平均时间(以纳秒为单位 - 1秒= 1 000 000 000纳秒(十亿))。
提前致谢!!
答案 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.