【问题标题】:Confused about BinarySearch [duplicate]对 BinarySearch 感到困惑 [重复]
【发布时间】:2012-12-28 12:44:52
【问题描述】:

可能重复:
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”并且可以找到?

谢谢

【问题讨论】:

  • 首先你应该知道二进制搜索是如何工作的,然后开始实施。 ://
  • 打印的值是否正确?

标签: arrays


【解决方案1】:

二分搜索算法假定它正在查看按升序排序的数据,在您第一次调用数组时:

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

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

【讨论】:

    【解决方案2】:

    因为二分查找不适用于未排序的数组。当你看到一个更大的元素时,你就断定搜索到的项目不在数组中。

    【讨论】:

    • 其实当你在x位置看到更大的数字时(假设x代表你选择的中间点)你在(0, x-1)位置递归,即向左走。
    【解决方案3】:

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

    如果仍有疑问,请实现您自己的二分搜索并逐步完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 2018-08-15
      • 2016-02-21
      • 2023-03-08
      • 2021-11-12
      相关资源
      最近更新 更多