我有这个bubblesort代码,我正在执行运行时分析,记录对数组进行排序所需的时间。我想知道是否有任何方法可以使用循环增加数组的大小?因为目前我手动一次递增100个,我需要达到5000的数组大小。
public class BubbleSortworking{
public static void main (String[] args) {
Random rand = new Random();
int myArray[] = new int[100]; //How to increment this using a loop
int count, count2;
count2 = 2; //amount of times to run the loop
//repeats the bubble sort, while also producing new arrays each time
for (count = 0; count < count2; count++){
for (int i = 0; i < myArray.length; i++){
myArray[i] = rand.nextInt(100) + 1; //produce numbers between 1 - ?
//System.out.print(myArray[i] + ", "); //displays unsorted array
}
bubble(myArray);
// uncomment below 2 lines to prove each new sorted array cycle is unique
//for (int i = 0; i < myArray.length; i++)
// System.out.print(myArray[i] + ", ");
}
}
public static void bubble(int myArray[]){
int temp;
long start = System.nanoTime();
//System.out.println("start " + start);
//for (count = 0; count < count2; count++){
for (int i=0; i < myArray.length - 1; i++) {
for(int j=myArray.length - 1; j > i; j--) {
if (myArray[j] < myArray[j-1]){
temp = myArray[j];
myArray[j] = myArray[j-1];
myArray[j-1] = temp;
}
}
}
long end = System.nanoTime();
System.out.println(end - start);
//System.out.println("elapsed time " + (end - start));
}
}
答案 0 :(得分:1)
不能一旦创建就无法更改数组的大小。您要么必须分配比您认为需要的更大的分配,要么接受必须重新分配的开销需要增长。当它发生时你必须分配一个新数据并将数据从旧数据复制到新数据。
答案 1 :(得分:1)
您需要使用ArrayList,它会为您执行此操作,但需要额外的开销。
或者,您可以在开始之前将数组分配为大小5000,并记录到目前为止在变量中使用的元素数量(而不是依赖于array.length)
或者,您可以通过创建一个更大的新数组并将所有元素复制到它(System.arrayCopy(..))以及放入新数组来调整数组的大小。
答案 2 :(得分:0)
rizon的答案是正确的,你无法改变数组的大小。顺便说一句,你没有在哪里重新创建阵列,也没有看到你在哪里处理5000个元素。如果您担心处理时间,则不希望重新创建/调整数组大小,因为这样效率非常低。你会想要一个不同的解决方案。
答案 3 :(得分:0)
这可能对您有所帮助
int[] intA = new int[100];
int sizeToIncrement = 100;
for(int i=0;i<5000;i++) {
if(i== intA.length ) {
intA = Arrays.copyOf(intA, intA.length + sizeToIncrement);
}
intA[i] = i;
}