如何调用具有各种数组大小的算法

时间:2018-05-10 10:23:50

标签: arrays sorting random

我正在努力创建一种可以创建各种大小的随机数组的方法。

我需要这个,因为我必须使用随机数组测试一些算法,我们需要报告它们在不同输入大小上的表现。

要拥有不同的大小,我虽然可以创建一个包含我想要的所有输入大小的数组并循环遍历它,然后将值分配给n,但它似乎没有工作。

以下代码编译,但我没有得到不同的输入大小。但是我得到一个随机数组。

我在另一个课程中有相关的算法并且它们都运行正常,所以我不会在这里包括 - 它只是这部分让我绊倒。

有人有什么想法吗?

public class Array {
    static int[] randomArray(int n){
        int [] inputSize = {50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000};

        for (int i=0; i<inputSize.length; i++){
            n = inputSize[i];
        }
        int[] array = new int[n];

        for (int j = 0; j < n; j++){
            array [j] = (int) (Math.random() * 100); 
        }

        return array;
    }  
}

3 个答案:

答案 0 :(得分:0)

你的问题就在这个循环中

    for (int i=0; i<inputSize.length; i++){
        n = inputSize[i];
    }

n将始终等于500000;

您可以使用随机替换此循环。

Random random = new Random();
n = inputSize[random.nextInt(inputSize.length)];

因此,此代码将从您的inputSize数组

中分配n个随机值

答案 1 :(得分:0)

在循环结束时:

for (int i=0; i<inputSize.length; i++){
    n = inputSize[i];
}

n的值为500000

解决方案是将所有后续代码也放入该循环中。

编辑:
但是,您的方法仍将只返回单个数组。或许分手

public class Array {
    private static int [] inputSize = {50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000};

    public static void main(String[] args) {
        for(int i=0; i<inputSize.length; i++){
            int size = inputSize[i];
            int[] randomArray = createRandomArray(size);
            //perform your tests on randomArray
        }
    }
    /**
     * Creates a new int[] of length 'size', filled with random ints between 0-100
     **/
    private static int[] createRandomArray(int size){

        int[] array = new int[size];

        for (int j = 0; j < size; j++){
            array [j] = (int) (Math.random() * 100); 
            //or replace with a call to Random.nextInt(100) as suggested by others, for tidiness and to avoid the cast
        }


        return array;
    }  
}

答案 2 :(得分:0)

要获得随机数组,您需要随机化 n 。看:

static int[] randomArray(){
      //sizes
      int [] inputSize = {50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000};
      //randomized size
      int n = inputSize[(int) (Math.random() * inputSize.length)];
      //array with randomized size
      int[] array = new int[n];
      //filling array with randomized array
      for (int j = 0; j < n; j++){
        array [j] = (int) (Math.random() * 100); 
      }
      //randomized array (values + size)
      return array;
}

结果:

[59, 82, 40, 2, 34, 15, 96, 98, 73, 71, 93, 83, 37, 88, 87, 11, 44, 81, 61, 33, 99, 71, 24, 41, 50, 77, 4, 39, 34, 12, 33, 94, 92, 50, 95, 76, 92, 47, 85, 56, 97, 7, 34, 50, 67, 69, 34, 47, 22, 91, 50, 68, 81, 67, 37, 90, 72, 16, 28, 37, 97, 74, 39, 32, 66, 63, 30, 90, 61, 44, 39, 11, 84, 89, 70, 79, 88, 58, 88, 48, 89, 16, 82, 7, 17, 11, 94, 4, 22, 29, 83, 65, 21, 39, 22, 35, 87, 87, 10, 4]

请参阅https://ideone.com/VX0CvL

更新于05/12/2018:如果您需要订购此结果,请执行以下操作:

static int[][] randomArray(){
   //sizes
   int [] inputSize = {50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000};
   //result
   int[][] result = new int[inputSize.length][];
   //randomized size
   for (int i=0; i<inputSize.length; i++){
        //define length
        int n = inputSize[i];
        //create array
        int[] array = new int[n];
        //filling array with randomized array
        for (int j = 0; j < n; j++){
            array[j] = (int) (Math.random() * 100); 
        }
        result[i] = array;
    }
    //randomized array (values + size)
    return result;
}

结果:

[88, 9, ...] # n = 50
[25, 37, 24, 35, 52, ...] # n = 100
[2, 34, 7, 17, 82, 42, 20, 57, 69, 24, ...] #n = 500
...

请参阅https://ideone.com/BCM69F