所以我有一个未排序单词的数组列表。我想按字母顺序对此列表进行排序。我的主要问题是我正在获得StackOver流程。另一个是当我绕过堆栈溢出时,它不会对它们进行排序。 (二进制搜索不应该对整个数组进行排序,只需给出应该添加该点的索引)。
代码:
public int binarySearch(ArrayList<String> a, String target) {
return binarySearch(a, target, 0, a.size() - 1);
}
private int binarySearch(ArrayList<String> a, String target, int first,
int last) {
int mid = (first + last) / 2;
if (first > last) {
return first;
}
if (a.size() == 0) {
return 0;
}
if (target.equals(a.get(mid))) {
return mid;
}
if (a.get(mid).compareTo(target) > 0) {
return binarySearch(a, target, mid - 1, last);
}
if (a.get(mid).compareTo(target) < 0) {
return binarySearch(a, target, mid + 1, last);
} else
return mid;
}
答案 0 :(得分:0)
我相信你的问题在这里:
if (a.get(mid).compareTo(target) > 0) {
return binarySearch(a, target, mid - 1, last);
}
如果target
小于你的支点,你想搜索数组的左半部分,first
到mid-1
:
if (a.get(mid).compareTo(target) > 0) {
return binarySearch(a, target, first, mid-1);
}
相反,你正在搜索右半部分加上左半部分的最后一个元素。
答案 1 :(得分:0)
解决方案
private int binarySearch(ArrayList<String> a, String target, int first,
int last) {
int mid = (first + last) / 2;
if (first > last) {
return first;
}
if (a.size() == 0) {
return 0;
}
if (target.equals(a.get(mid))) {
return mid;
} else {
if (a.get(mid).compareTo(target) < 0) {
return binarySearch(a, target, mid+1,last);
}
else{
return binarySearch(a,target,first,mid-1);
}
}
}