在二分查找中,计算机如何选择中点以及何时只剩下两个元素

In binary search, how does computer choose mid point and when there is only two elements left

我已经阅读了一些关于此事的 Whosebug 问题和其他博客。

他们中的大多数解释使用以下方法选择中点:

1. low + (high - low)/2
2. (low + high)/2, round down to integer.

来自 and https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search

None 其中非常有道理。

假设我有一个列表

lst = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]

使用 1.midpoint = 46.5 并使用 2.midpoint = 50.5,四舍五入为 50。

两个中点都不在我的列表中。

再者当只有2个元素时,选择哪一个作为中点?

二分查找low/high引用索引而不是数组值。
所以在你的例子中 index 是 (0+9)/2=4.

如果长度为 2,你将得到 mid 索引 0,右边部分将有一个元素,左边为空(或者包含唯一的第 0 个元素,如果 mid 不单独处理)。

lowhigh 变量不引用列表或数组的元素。它们引用列表或数组的索引。因此,中间元素不会由 low + (high - low)/2(low + high)/2(向下舍入为整数)给出,而是由 lst[low + (high - low)/2]lst[(low + high)/2]

给出
  1. lowhigh 引用列表的索引而不是它们的值

  2. 如果有两个元素,它将采用 lowhigh,它们分别是 0 和 1,然后执行 low + (high - low)/2,这将等于 0 + (1 - 0)/2 这给了我们 0.5 取决于你的算法你可以四舍五入或向下舍入,因为你选择了向下舍入我们有一个值 0 这将是中间点的索引将被选中