Python 二分法递归查找列表 v2.0

本文介绍了如何使用二分法在Python中查找目标值,特别是当目标位于列表间隙的情况。通过递归算法,当目标值在数组中时返回其索引,超出范围时返回0或数组长度,而在间隙位置则返回插入索引。文章提供了函数版和类版的二分查找实现,并强调了初始化和避免过度查找的重要性。
摘要由CSDN通过智能技术生成

二分法适合在闭区间中查找,所以本文排除了目标超出数值范围的情况,至于目标在列表中有对应元素的情况,用内置函数会方便很多,所以本文主要是针对目标在数组间隙位置的情况,利用二分法进行查找,具体来说:
若目标在数组中,直接返回其索引(若目标对应元素有重复,则返回相同元素位置范围);
若目标超出了列表数值范围,返回0,或者数组长度;
若目标在数组间隙位置,则返回其加入数组但不改变数组排序的索引值。

ps:新手一枚,不足之处,敬请赞之→ _ →

解题思路

1)简单说二分查找就是一个切片查找的过程,通过对比目标(t)和中点值(m)[0]的大小决定是下一级查找是向左还是向右。
如:原数组[a,b, …,m,c,…,d],若 t > m, 则在下级数组[m,c, … ,d]中继续找中点m1,若 t < m, 则在下级数组[a,b, …,m]中继续找中点m1,如此反复,直到中点和端点相邻,就可以确定目标位置。
[0]:中点索引通过数组的端点(left和right)索引之和除以2取整获得:
m=(left+right)//2

2)具体程序如下,函数版简单粗暴直接上二分查找,完整版最初是因为数组排序和右端点初始值的获取只需一次,而查找需要迭代,两者矛盾,所以就引入了类,发现效果好像不是很好,简单程序还是直接使用函数方便,这次权当是类的演练吧。除了上面提到的初始化问题,结合文章开头的分析于是就有了完整版。

程序

函数版:

def search(thelist, target, right, left=0):
    mid_index = (left + right) // 2 
    mid_value = thelist[mid_index]
    if target == mid_value:
        return mid_index
    if target < mid_value:
        if mid_index - left <= 1:
            if target < thelist[left]:
                result = left
            else:
                result = left + 1
            return result
        else:
            right = mid_index
            return gap_search(thelist,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值