对BinarySearch感到困惑

时间:2012-12-28 04:35:38

标签: arrays

  

可能重复:
  Arrays.binarySearch doesnt work like it should

根据我对BinarySearch的理解,如果在数组或集合中找不到元素,它将只返回一个插入点。

所以这段代码让我有些困惑:

import java.util.*;

public class LookinGlass {

    public static void main(String args[]){

        String[] asa = {"x", "c", "b", "d"};

        int x  = Arrays.binarySearch(asa, "b");

        System.out.println("Index is at " + x);

        Arrays.sort(asa);

        int y = Arrays.binarySearch(asa, "b");

        System.out.println(x + " " + y);
    }

}

当我打印出x时,为什么它表示索引是-1,当数组中明显存在“b”并且可以找到它时?

由于

3 个答案:

答案 0 :(得分:1)

因为二进制搜索不适用于未排序的数组。当您看到一个更大的元素时,您可以得出结论,搜索到的项目不在数组中。

答案 1 :(得分:1)

二进制搜索算法假设在第一次调用数组时它正在查看按升序排序的数据:

 String[] asa = {"x", "c", "b", "d"};

未排序。因此,Arrays.binarySearch(asa, "b");调用正在返回-1,因为它无法使用二进制搜索算法在数组中找到"b"

答案 2 :(得分:0)

如果您认为二进制搜索的工作方式是正确的,然后尝试想象如果您在未排序的列表上运行二进制搜索会发生什么,那么它应该变得明显,为什么它不起作用。

如果仍有疑问,请实施自己的二分查找并逐步完成。