0

我有这个冒泡排序代码,我正在执行运行时分析以记录对数组进行排序所需的时间。我想知道是否有任何方法可以使用循环增加数组的大小?因为目前我手动将其增加 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));


}

}

4

4 回答 4

1

不,一旦创建,您就无法更改数组的大小。您要么必须分配比您认为需要的更大的空间,要么接受必须重新分配它的开销以增加大小。当它发生时,您必须分配一个新数据并将数据从旧数据复制到新数据。

于 2012-12-08T17:34:09.737 回答
1

您要么需要使用 ArrayList,它会为您执行此操作,但会产生额外的开销。

或者,您可以在开始之前将数组分配为大小 5000,并记录您迄今为止在变量中使用了多少个元素(而不是依赖于 array.length)

或者,您可以通过创建一个更大的新数组并将所有元素复制到其中(System.arrayCopy(..))以及放入新数组来调整数组的大小。

于 2012-12-08T18:04:11.657 回答
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;
}
于 2012-12-08T18:31:52.283 回答
0

rizon 的答案是正确的,您无法更改数组的大小。顺便说一句,你在哪里重新创建数组,我也看不到你在哪里处理 5000 个元素。如果您担心处理时间,则不希望重新创建/调整数组大小,因为那样效率非常低。你会想要一个不同的解决方案。

于 2012-12-08T18:06:41.620 回答