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我做了一个编辑,其中包含了一个如何避免重复代码的想法。如果您有问题,请告诉我,我想这会有所帮助。