Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于多种排序方法的单数组输入_Java_Arrays - Fatal编程技术网

Java 用于多种排序方法的单数组输入

Java 用于多种排序方法的单数组输入,java,arrays,Java,Arrays,我想使用系统命令(如nanoTime)测试排序方法的性能 我目前面临的问题是,我有4种不同的排序方法,我只接受一个数组输入。使用单个数组测试所有排序方法的最佳方法是什么 制作没有参考点的副本是一种方法吗?您可以(a)制作副本以在一次运行期间检查所有方法,或者(b)通过选择此输入的方法来多次运行代码。第一种方法似乎更简单: public static void main(String[] args) { final int methods = 4; final int[] inpu

我想使用系统命令(如
nanoTime
)测试排序方法的性能

我目前面临的问题是,我有4种不同的排序方法,我只接受一个数组输入。使用单个数组测试所有排序方法的最佳方法是什么

制作没有参考点的副本是一种方法吗?

您可以(a)制作副本以在一次运行期间检查所有方法,或者(b)通过选择此输入的方法来多次运行代码。第一种方法似乎更简单:

public static void main(String[] args) {
    final int methods = 4;
    final int[] input = new int[0]; // or whatever you want.
    final long[] measures = new long[methods];

    for (int c = 0; c < methods; c++) {
        int[] copy = new int[input.length];
        System.arraycopy(input, 0, copy, 0, input.length);

        long start = System.nanoTime();
        switch (c) {
            case 0:
                // call method #0
                break;
            //...
            case 3:
                // call method #3
                break;
        }
        measures[c] = System.nanoTime() - start;
    }

    System.out.println("Measures: " + Arrays.toString(measures));
}
publicstaticvoidmain(字符串[]args){
最终int方法=4;
final int[]input=new int[0];//或任何您想要的内容。
最终长期[]措施=新长期[方法];
for(int c=0;c
一种解决方案是在每个方法中创建一个临时数组,并对该数组进行排序,使原始数组保持不变

这是我的想象。这假设您希望返回排序的数组,但如果您只想对排序计时,则可能不必返回

public String[] sort1(String[] arr){
    String[] temp = Arrays.copyOf(arr, arr.Length);
    // start counter
    // sort temp
    // end counter
    return temp;
}
然后在主方法中的某个地方,您可以使用原始数组调用每个排序方法,并且它永远不会被更改

我(无可否认)不是一个效率专家,可能有一种比创建每个数组的副本更有效的方法,但如果这只是一个测试排序速度的小应用程序,那么它应该可以满足您的所有需要

编辑

这里有一个我想到的控制流程,我认为这将有助于使事情最有条理

// Create array
public String[] myArray = {"Blah", "Blah", "Blah"};

// Have one sortArray() method that will take the array to be sorted, as well as the type of sort to be used.
public void sortArray(String[] arr, int arrayType){
   String[] temp = Arrays.copyOf(arr, arr.Length);

   // Switch based on sort type
   switch(arrayType){
      case 1:
         sort1(temp);
         break;
      case 2:
         sort2(temp);
         break;
      default:
         // Maybe raise exception about no available sort. Or just break.
         break;
   }
}

// Your main method can loop through each:
public static void Main(String[] args){
   int numSorts = 4; // Or whatever

   for(int i = 1; i <= numSorts; i++){
      sortArray(myArray, i);
   }
}
//创建数组
公共字符串[]myArray={“诸如此类”、“诸如此类”、“诸如此类”};
//有一个sortaray()方法,该方法将获取要排序的数组以及要使用的排序类型。
public void sortArray(字符串[]arr,int arrayType){
字符串[]temp=Arrays.copyOf(arr,arr.Length);
//基于排序类型的开关
开关(arrayType){
案例1:
sort1(温度);
打破
案例2:
sort2(温度);
打破
违约:
//可能会引发关于无可用排序的异常。或者只是中断。
打破
}
}
//您的主要方法可以循环通过以下各项:
公共静态void Main(字符串[]args){
int numSorts=4;//或其他

对于(int i=1;谢谢你。我不认为有办法复制多个副本。@某位老太太没问题!是的,你在某些方面仍在复制,但这比创建输入数组的多个副本要好,因为它只是浪费了几行代码。我想我有一个办法让整个过程顺利进行,我将编辑问题i等一下。@SooldLady我做了一个编辑,其中包含了一个如何避免重复代码的想法。如果您有问题,请告诉我,我想这会有所帮助。