我这个项目的目标是使用随机数来衡量选择排序的性能。我想从数组大小n = 100开始,我想将该数组大小加倍至200,000(n = 100 * 2,n = 200 * 2,n = 400 * 2 ....)我做了一个在类中设置我的selectionSort方法非常好,但是我在编写一个将我的数组大小加倍的for循环时遇到了麻烦。 这是我的代码:
public static void selectionSort(int[] data) {
int temp;
int j;
int i;
for (i = 0; i < data.length - 1; i++ ){
int min = i;
for(j = i + 1; j < data.length; j++){
if(data[j] < data[min])
min = j;
}
temp = data[min];
data[min] = data[i];
data[i] = temp;
}
}
public static void main(String[] args) {
int[] bigdata = new int[100];
randomFill(bigdata, 100000);
for(int i = 100; i < 200000; i *= 2){ // this is where I am having trouble
bigdata[i] = bigdata[i] * 2;}
display(bigdata);
System.out.println("Is sorted before selectionSort: " + isSorted(bigdata));
long start = System.currentTimeMillis();
selectionSort(bigdata);
display(bigdata);
long elapsed = System.currentTimeMillis() - start;
System.out.println("Is sorted after selectionSort: " + isSorted(bigdata));
System.out.println("Elapsed time in milliseconds " + elapsed);
}
}
我在main中的代码已经成功地显示了一个大小为100的随机数组的selectionSort性能,但我不确定下一步该写一个forloop来加倍我的数组&#34;大数据&#34;高达200000。
答案 0 :(得分:1)
public static void selectionSort(int[] data) {
int temp;
int j;
int i;
for (i = 0; i < data.length - 1; i++ ){
int min = i;
for(j = i + 1; j < data.length; j++){
if(data[j] < data[min])
min = j;
}
temp = data[min];
data[min] = data[i];
data[i] = temp;
}
}
public static void main(String[] args) {
int[] bigdata;
for(int i = 100; i < 200000; i *= 2){
// Here you double the size of bigdata array
bigdata = new int[i];
// You fill the i sized array
randomFill(bigdata, 100000);
display(bigdata);
System.out.println("Is sorted before selectionSort: " + isSorted(bigdata));
long start = System.currentTimeMillis();
selectionSort(bigdata);
display(bigdata);
long elapsed = System.currentTimeMillis() - start;
System.out.println("Is sorted after selectionSort: " + isSorted(bigdata));
System.out.println("Elapsed time in milliseconds " + elapsed);
}
}
答案 1 :(得分:0)
考虑使用java.util.ArrayList
的实现,例如:int[] bigdata = new int[100];
。这将确保您不必费心管理列表的大小。当您不断添加更多元素时,它会自动扩展。
List<Integer> bigdata = new ArrayList<>();
可以更改为:
randomFill(int[], int)
randomFill(List<Integer>, int)
方法可以更改为{{1}}。
这可以帮助您开始朝着正确的方向前进。