【发布时间】:2015-04-20 20:14:54
【问题描述】:
我正在尝试对字符串数组进行三元搜索。我已经把大部分代码都写下来了,我认为我走在正确的轨道上,但除了-1之外似乎没有得到任何结果。以下是我迄今为止生成的代码。我知道问题出在搜索算法上。我不想使用任何内置的,因为我正在学习。
public static void main(String[] args) {
//declare a string array with initial size
String[] songs = {"Ace", "Space", "Diamond"};
System.out.println("\nTest binary (String):");
System.out.println(search(songs,"Ace"));
}
public static int search(String[] x, String target) {
int start=0, end=x.length;
while (start > end) {
int midpoint1 = start+(end - start)/3;
int midpoint2 = start +2*(end-start)/3;
if ( target.compareTo(x[midpoint1]) == 0 )
return midpoint1;
else if ( target.compareTo(x[midpoint2]) == 0 )
return midpoint2;
else if ( target.compareTo(x[midpoint1]) < 0 )
return end = midpoint1-1;
else if ( target.compareTo(x[midpoint2]) > 0 )
return start = midpoint2+1;
}
return -1;
}
【问题讨论】:
-
为什么将方法声明为 int?
-
你应该学会如何自己调试这些类型的问题。你会一直被这样的事情困住,尤其是在开始的时候。在这种情况下,打印几张就足够了。