如何生成不同大小的随机数组以测试算法性能?
解决随机数组生成问题:生成多种规模的数组用于性能测试
嘿,我一眼就看出问题所在啦!你当前的代码里,那个循环给n赋值的操作其实是无效的——因为循环结束后,n只会停在inputSize数组的最后一个元素(也就是500000),前面的50、100这些值都被覆盖掉了,所以最后只生成了这一个大小的数组。
要生成多种规模的随机数组,我们需要调整代码逻辑,让每个预设的大小都对应生成一个独立的数组。下面给你两种可行的方案:
方案一:返回二维数组一次性获取所有数组
把原方法修改为返回二维数组,每个子数组对应一个预设的大小:
public class Array { // 返回包含多种大小随机数组的二维数组 static int[][] randomArrays() { int[] inputSizes = {50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000}; int[][] arrays = new int[inputSizes.length][]; for (int i = 0; i < inputSizes.length; i++) { int n = inputSizes[i]; int[] array = new int[n]; for (int j = 0; j < n; j++) { array[j] = (int) (Math.random() * 100); } arrays[i] = array; } return arrays; } }
使用方式
在测试代码里可以这样遍历所有数组:
public class PerformanceTest { public static void main(String[] args) { int[][] allArrays = Array.randomArrays(); for (int[] arr : allArrays) { System.out.println("当前测试数组大小:" + arr.length); // 在这里调用你的算法,比如排序、查找等,并统计性能 } } }
方案二:拆分方法,更灵活地生成数组
把生成单个随机数组的逻辑抽成独立方法,再通过另一个方法循环生成所有预设大小的数组(用List存储更灵活):
import java.util.ArrayList; import java.util.List; public class Array { // 生成单个指定大小的随机数组 static int[] randomSingleArray(int n) { int[] array = new int[n]; for (int j = 0; j < n; j++) { array[j] = (int) (Math.random() * 100); } return array; } // 生成所有预设大小的随机数组集合 static List<int[]> getMultipleRandomArrays() { int[] inputSizes = {50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000}; List<int[]> arraysList = new ArrayList<>(); for (int size : inputSizes) { arraysList.add(randomSingleArray(size)); } return arraysList; } }
使用方式
public class PerformanceTest { public static void main(String[] args) { List<int[]> arraysList = Array.getMultipleRandomArrays(); for (int[] arr : arraysList) { System.out.println("当前测试数组大小:" + arr.length); // 执行你的算法性能测试 } } }
两种方案都能解决你的问题,方案二更灵活——如果你后续需要添加或修改测试的数组大小,只需要修改inputSizes数组即可,而且randomSingleArray方法还能单独调用生成任意大小的数组,复用性更强。
内容的提问来源于stack exchange,提问作者Mairead
相关产品推荐
相关产品推荐

