如何为二进制搜索排序字符串数组。下面我总是收到索引的减号而不是正确的索引。请帮忙?如果单词不在数组中,则应返回-1。
public static int binary (String [] theword, String a) {
int index = -1;
Arrays.sort(theword);
Arrays.toString(theword);
index = Arrays.binarySearch(theword, a);
return index;
}
答案 0 :(得分:3)
有效,见下文
public static void main(String... args) {
String words[] = { "abc3", "abc2", "abc1", "abc4" };
Arrays.sort(words);
System.out.println(Arrays.toString(words));
{
String word = "abc3";
int index = Arrays.binarySearch(words, word);
index = index >= 0 ? index : -1;
System.out.println(word + " = " + index);
}
{
String word = "abc11";
int index = Arrays.binarySearch(words, word);
index = index >= 0 ? index : -1;
System.out.println(word + " = " + index);
}
}
输出
[abc1, abc2, abc3, abc4]
abc3 = 2
abc11 = -1
当您需要原始数组中的索引时,可以从已排序的数组中返回索引。
答案 1 :(得分:1)
文档说明Arrays.binarySearch()的返回值如下:
<强>返回:强>
搜索键的索引,如果它包含在数组中; 否则,( - (插入点) - 1)。插入点定义为 密钥插入数组的点:索引 大于键的第一个元素,或者所有元素的a.length 在数组中小于指定的键。请注意这一点 当且仅当密钥时,保证返回值>&gt; = 0 找到了。
很明显,二元搜索找不到你的单词“to”。而且,如果它存在,它将在该数组的第10个索引中。作为-(10) -1 == -11
您很可能正在搜索单词to
,但数组中的数据包含单词to
,其周围有一些空格,为您提供不需要的,但正确的二进制结果搜索范围。
答案 2 :(得分:1)
我看到的一个常见错误是在相关单词中添加了空格。在添加到数组之前,对每个单词应用trim()函数。