旁注,我已经写了大约5种不同的排序方法(如下面显示的selectionSort),并且想知道是否有人对测试方法中旋转它们的最佳方法有任何想法,这样我就不必改变selectionTort to other else每次我想测试不同的排序方法。欢呼声。
public void testSorts(){
int size = 100;
if(size < 1000000){
String[] data;
long start;
long time;
UI.println("\n\n======Selection Sort=======\n");
data = createArray(size);
start = System.currentTimeMillis();
selectionSort(data);
time = System.currentTimeMillis() - start;
UI.printf("Number of items: %,d\n", data.length);
UI.printf("Sorted correcetly: %b\n", testSorted(data));
UI.printf("Time taken: %.2f s\n", time/1000.0);
UI.println("\n=======DONE=========\n");
size = size*10;
testSorts();
}
答案 0 :(得分:0)
如果你传入&#34;尺寸&#34;你可以解决这个问题。 testSorts函数的参数。就像现在一样,你只是在自己内部调用相同的函数而没有任何改变,所以你将得到一个无限循环(实际上是一个堆栈溢出)。
作为一个更大的图片评论,我没有看到任何使用递归的理由。
答案 1 :(得分:0)
为什么不创建一个方法'test()',其中包含一个调用实际测试方法的for循环?你的for循环可以增加100,就像你'testSorts'方法一样。
for(int size = 0; size < 1000000; size += 100) {
testSort(size);
}
答案 2 :(得分:0)
问题是你的变量size
是方法的本地变量,所以当你增加大小然后再次调用testSorts
时,会在递归范围内创建一个“new size”变量调用
要递归使用此功能,您必须:
public void testSorts(int size){
if(size < 1000000){
....
size = size*10;
testSorts(size);
}
}
但是,我会使用一个简单的循环来逐步增加一个数量级的大小:
for (int size = 100; size < 1000000; size = size * 10){
String[] data;
long start;
long time;
UI.println("\n\n======Selection Sort=======\n");
data = createArray(size);
start = System.currentTimeMillis();
selectionSort(data);
time = System.currentTimeMillis() - start;
UI.printf("Number of items: %,d\n", data.length);
UI.printf("Sorted correcetly: %b\n", testSorted(data));
UI.printf("Time taken: %.2f s\n", time/1000.0);
UI.println("\n=======DONE=========\n");
}
答案 3 :(得分:0)
我同意其他回答者说这里不需要使用递归,@ Rein或多或少地建议我做什么。
关于“自动”尝试不同类型的排序,您可以:
public String[] sort(String[] data)
方法这意味着您的搜索算法与“测试工具”类很好地分开。