如果数组未排序,则binarySearch返回随机索引;返回索引背后的逻辑是什么?

时间:2017-11-10 11:56:20

标签: java arrays binary-search

如果我有一个如下所示的数组:

int[] arr = {6, 12, 3, 9, 8, 25, 10};

为什么这会返回-2

Arrays.binarySearch(arr, 8);

我知道binarySearch仅在数组排序时才有效。我的问题是什么决定了返回的索引?

1 个答案:

答案 0 :(得分:3)

正如@assylias在评论中提到的binarySearch的文档我可以引用它

  

<强>返回:   搜索关键字的索引,如果它包含在指定范围内的数组中;否则,( - (插入点) - 1)。插入点定义为键将插入到数组中的点:范围中第一个元素的索引大于键,或者如果范围中的所有元素都小于指定键,则为toIndex。请注意,当且仅当找到密钥时,这可以保证返回值>> =。

所以基本上这就是你试图搜索未排序数组时发生的事情:

{6, 12, 3, 9, 8, 25, 10}

  • 它需要中间元素9并将其与搜索到的元素8进行比较,因为8较低需要较低的一半{6, 12, 3}
  • 在第二步中将128进行比较,并且由于8再次降低,所以需要降低一半{6}
  • 6不等于8,因为它是最后一个找不到你想要的元素
  • 它返回(-(insertion point) - 1)所在的insertion point
      

    范围内第一个元素的索引大于键

  • 在你的情况下,索引是1,因为第一个元素大于812而且它的索引是1
  • 当您将其放入等式时,它会返回(-1 - 1),等于-2

希望我已经回答了你的问题。