证明二分查找的最坏情况运行时间为lgn

本文介绍了两种二分查找算法的实现方式,包括迭代和递归版本。二分查找适用于已排序的数组,通过不断缩小查找范围来提高效率。迭代版本通过循环逐步调整查找边界,而递归版本则通过函数调用自身来实现。两种方法在找不到目标值时返回NIL,找到则返回目标值在数组的下标。其时间复杂度为O(log n)。
摘要由CSDN通过智能技术生成

二分查找程序需要一个已经排好序的数组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) + \Theta(1) . 从而解得 T(n) =   \Theta(lg n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值