二进制搜索字符串数组

时间:2013-04-18 16:10:25

标签: java arrays binary-search

如何为二进制搜索排序字符串数组。下面我总是收到索引的减号而不是正确的索引。请帮忙?如果单词不在数组中,则应返回-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;

}   

3 个答案:

答案 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()函数。