二进制搜索是否保证算法中使用的三个变量之一将保持密钥的正确位置?
Does Binary Search guarantees that one of the THREE variables used in the algorithm will hold the right position of the key?
标题可能没有说清楚我想问的是什么,因为它不完整(所以标题限制在150字以内)。
我的问题是,即使未在给定的排序序列中找到,二分搜索是否保证算法中使用的三个变量之一将保持键的正确位置?
我有一个例子来澄清这个问题。
考虑一个长度为 5 的排序数组 A;
int a[] = {2, 8, 9, 11, 14};
显然,数组不包含 7。通过查看序列,我们可以说如果元素 7 在数组中,则其索引为 1。
在上面的序列中使用键 7 执行二进制搜索,将 return -1(当然,这取决于实现)。但是,这三个变量中的任何一个,比如 p(如果变得大于 r,就会中断循环)、q(存储 (p + r) / 2)和 r(如果变得小于 p,就会中断循环)当循环中断时,将保持上述序列中值 7 的正确位置(即 1)?
或者,一些数学计算可以帮助我们找到 7 的正确位置吗?
如你所见,当数组的高低索引相同时,二分查找returns为-1。这些索引将是相同的,并且位于假定数字存在的位置上。 (此处索引 1)
Yes ! 检查 a[low]
和 a[high]
否则执行二进制搜索。 mid
变量将存储元素应放置在 a[mid]
之前或之后的确切位置
low = 0
和 high = arrar_length - 1
检查此代码以供参考。 http://ideone.com/OYv3ih
标题可能没有说清楚我想问的是什么,因为它不完整(所以标题限制在150字以内)。
我的问题是,即使未在给定的排序序列中找到,二分搜索是否保证算法中使用的三个变量之一将保持键的正确位置?
我有一个例子来澄清这个问题。
考虑一个长度为 5 的排序数组 A;
int a[] = {2, 8, 9, 11, 14};
显然,数组不包含 7。通过查看序列,我们可以说如果元素 7 在数组中,则其索引为 1。
在上面的序列中使用键 7 执行二进制搜索,将 return -1(当然,这取决于实现)。但是,这三个变量中的任何一个,比如 p(如果变得大于 r,就会中断循环)、q(存储 (p + r) / 2)和 r(如果变得小于 p,就会中断循环)当循环中断时,将保持上述序列中值 7 的正确位置(即 1)?
或者,一些数学计算可以帮助我们找到 7 的正确位置吗?
如你所见,当数组的高低索引相同时,二分查找returns为-1。这些索引将是相同的,并且位于假定数字存在的位置上。 (此处索引 1)
Yes ! 检查 a[low]
和 a[high]
否则执行二进制搜索。 mid
变量将存储元素应放置在 a[mid]
low = 0
和 high = arrar_length - 1
检查此代码以供参考。 http://ideone.com/OYv3ih