二分查找程序需要一个已经排好序的数组A, 所需查找目标值v和我们查找v所在的数组范围[low..high].程序通过将目标值v与数组目标范围中点值进行比较,从而排除一半的范围.
我给出迭代版本和递归版本的伪代码, 每一个版本如果找到了目标值就返回目标值在数组的下标i, 如果没找到则返回NIL. 最开始的调用应该有4个参数 A, v, 1, n. (伪代码第一个元素从1开始).
迭代版本:
iterative-binary-search(A, v, low, high)
while low <= high
mid = int((low + high) / 2)
if v == A[mid]
return mid
elif v > A[mid]
low = mid + 1
else high = mid -1
return NIL
递归版本:
recursive-binary-search(A, v, low, high)
if low > high
return NIL
mid = int((low + high) / 2)
if v == A[mid]
return mid
elif v > A[mid]
return recursive-binary-search(A, v, mid + 1, high)
else return recursive-binary-search(A, v, low, mid - 1)
两个版本都是当查找列表为空时作为查找失败的标志(即: low > high), 此时终止程序. 当找到目标值程序返回目标值在数组的下标i(即:mid)
通过与查找范围中值进行比较,不断地将查找范围减半.因此这些程序的时间复杂度: T(n) = T(n / 2) + . 从而解得 T(n) =