问题查找列表项的位置是:使用二进制搜索
给定的字符串列表,在列表中找到一个特定的字符串,并通过归并排序字符串的有序列表返回 其索引。有 两种情况:
的字符串列表,返回它应该是在索引,排序列表。
该字符串不在列表中,返回它应该在有序列表中的索引。
这里是我的我的代码,我假设给定的列表已经下令。
对于第二种情况,我如何使用mergesort来查找假定的索引?我会欣赏一些线索。
我正在考虑先获取原始列表的副本,对其进行排序,并获取副本列表中字符串的索引。在这里,我陷入了困境......我是否再次使用mergesort来获取复制列表中不存在的字符串的索引?
public static int BSearch(List<String> s, String a) {
int size = s.size();
int half = size/2;
int index = 0;
// base case?
if (half == 0) {
if (s.get(half) == a) {
return index;
} else {
return index + 1;
}
}
// with String a
if (s.contains(a)) {
// on the right
if (s.indexOf(s) > half) {
List<String> rightHalf = s.subList(half + 1, size);
index += half;
return BSearch(rightHalf, a);
} else {
// one the left
List<String> leftHalf = s.subList(0, half - 1);
index += half;
return BSearch(leftHalf, a);
}
}
return index;
}
当我运行这段代码,该指数不更新。我不知道这里有什么问题。当我使用列表中的字符串测试代码时,我只得到0
或1
。
这行'if(s.contains(a))'有点违背了做二分查找的目的...... – smac89
因为在这个问题中有两种情况,我正在考虑在列表中有第一个字符串,然后考虑字符串不在列表中 – max
如果你正确地执行了二分查找,你只需要一个代码来确定字符串将在哪里处理 – smac89