如何使用for循环将数组大小加倍,以将选择排序性能与不同的数组大小进行比较?

时间:2016-09-30 04:08:19

标签: java arrays

我这个项目的目标是使用随机数来衡量选择排序的性能。我想从数组大小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。

2 个答案:

答案 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}}。

这可以帮助您开始朝着正确的方向前进。