【问题标题】:java Arrays.binarySearch fails to find targetjava Arrays.binarySearch 找不到目标
【发布时间】:2011-04-10 02:31:30
【问题描述】:
String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

// Search for the word "cat" 
int index = Arrays.binarySearch(sortedArray, "Quality");  

我总是收到-3。问题出在"Name"。为什么我的数组中不能有"Name"?有什么想法吗?

【问题讨论】:

  • “名称”应在“质量”之前,“包装”应在“测试”之前。
  • binarySearch 仅适用于排序数组。
  • @Jon,我认为您的意思是“包装”应该出现在“质量”之前。

标签: java binary-search


【解决方案1】:

为了使用binarySearch,您需要先自己对数组进行排序:

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

java.util.Arrays.sort(sortedArray);

int index = Arrays.binarySearch(sortedArray, "Quality");  

【讨论】:

    【解决方案2】:

    数组必须排序。来自 binarySearch() 的 Javadoc:

    在进行此调用之前,必须根据其元素的自然顺序对范围进行升序排序。如果未排序,则结果未定义。

    【讨论】:

      【解决方案3】:

      必须对数组进行排序才能使二进制搜索起作用。 binarySearch 的 javadoc 是这样说的:

      在进行此调用之前,必须根据其元素的自然顺序(如 sort(Object[]) 方法)对数组进行升序排序。 如果未排序,则结果未定义。

      (已添加重点。)

      原因很简单。二分查找算法的前提是输入数组是有序的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        • 2018-04-09
        相关资源
        最近更新 更多