数据结构(8)--搜索--二分查找法

二分法查找适用方法:
1.要求操作对象必须是排序过后的
2.操作对象支持下标索引,必须是连着放的,
即有序的顺序表

1. 递归搜索

这里普及一个切片的知识
字符串[开始索引:结束索引:步长] ,字符串截取遵循“左闭右开”原则,也叫“包左不包右”

**a[:mid]😗*从第一个位置到mid-1的位置,不包括mid, 指的是截取 mid 左边的数组 a[1]到a [mid-1]
**a[mid:]😗*从mid+1到n,不包括 n,指的是截取 mid 右边的数组 a[mid+1]到a [n]

def binary_search(a, item):
    n = len(a)
    if n > 0:
        mid = n //2
        if a[mid] == item:
            return True
        elif a[mid] > item:
            return binary_search(a[:mid], item)
        else:
            return binary_search(a[mid + 1:], item)
    return False


list = [1, 4, 5, 22, 8, 2]
result = binary_search(list, 22)
print(result)

2. 非递归正常比较

思路:
alist[mid]中间值大于目标值,取左边的区间
alist[mid]中间值小于目标值,取右边的区间
判断循环条件:
low <= high
相等时,说明区间只剩下一个值,还是需要比较执行下面循环的

def binary_search(alist, item):
    low = 0
    high = len(alist) - 1
    while low <= high:
        mid = (low + high) //2
        if alist[mid] == item:
            return True
        elif item < alist[mid]:
            high= mid - 1
        else:
            low = mid+ 1
    return False
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42, ]
print(binary_search(testlist, 3))
print(binary_search(testlist, 13))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值