“每个函数都应该使用数组输入运行,大小为100,1000和10000;其中每个都是
任何数组中的值应为1 - 1000(包括1和1000)的整数。每个排序功能应为
在以下类型的数组上运行:随机数,排序列表和几乎排序的列表“
下面我创建了三个数组。
第一个用1-1000的整数随机填充10000个数组。
使用1-10000的整数填充10000的数组。 Third Shuffles数组10000,包括1-10000的整数。
我的问题是我无法获得10000的第2和第3个数组仅包含1-1000的值。 甚至可能吗?我是新手。任何帮助将不胜感激!!
int [] inputTenThousand = new int[10000]; // Random 10000
for (int a = 0; a < inputTenThousand.length; a++) {
inputTenThousand [a] = (int) (Math.random () * 1000);
}
int [] inputTenThousand2 = new int[10000] // Sorted 10000
for (int a = 0; a < inputTenThousand2.length; a++) {
inputTenThousand2[a] = a + 1;
}
List<Integer> TenThousandList = new ArrayList<Integer>();
for (int i = 1; i < 10001; i++) {
TenThousandList.add(i);
}
Collections.shuffle(TenThousandList);
int[] inputTenThousand3 = new int[TenThousandList.size()]; // Almost Sorted 10000
for (int i = 0; i < TenThousandList.size(); i++) {
inputTenThousand3[i] = TenThousandList.get(i);
}
for (int i = 0; i < inputTenThousand3.length; i++) {
inputTenThousand3[i] = TenThousandList.get(i);
}
答案 0 :(得分:0)
只需为第二个和第三个列表添加modulo operator,即可使用您已有的代码非常接近。添加元素&#34; mod 1000&#34;确保列表中没有大于1000的值。(您必须在结果值中添加一个值才能将范围从0-999更改为1-1000)。
inputTenThousand2[a] = (a % 1000) + 1;
当然,这并不保留您最初创建的排序顺序,但是一旦生成这些数组,您就会注意到一个非常清晰的模式。您的阵列现在只是数字1-1000,重复十次。这使得描绘阵列看起来很简单:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
...
1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000]
因此,我们可以首先构建那个很好的排序列表:
int [] inputTenThousand2 = new int[10000]; // 10000 sorted integers
for (int v = 0; v < 1000; v++) { // loop from 0 to 999
for (int i = 0; i < 10; i++) {
inputTenThousand2[(10*v) + i] = v + 1; // Set ten elements per value of the outer loop
}
}
然后,您可以将此列表复制到第三个列表中,然后稍微取消&#34;这是你的第三种情况!
当然,取决于您可以访问的内容(这看起来像是一项任务,所以也许您没有随时可用的排序),将第一个列表创建为第一个列表可能更容易你已经拥有它,然后复制它并为第二种情况排序。