二进制搜索实现如下:
binary_search(A, target):
lo = 1, hi = size(A)
while lo <= hi:
mid = lo + (hi-lo)/2
if A[mid] == target:
return mid
else if A[mid] < target:
lo = mid+1
else:
hi = mid-1
能 lo = mid + 1
替换为
lo = mid
而且可以 hi = mid-1
替换为
hi = mid
我不明白这一点。如果有人能说清楚 - 这将是有用的。
答案 0 :(得分:0)
如果您在第一个if
中看到A [mid]不是目标,那么您就知道可以跳过mid元素而不会影响正确性。
所以是的,可以将lo和hi设置为mid以进行下一次迭代,但之后你只会考虑一个额外的元素,你知道它肯定不是你要搜索的值。
O(Log n)的运行时复杂度不受影响。