二分查找(python版)

本文介绍了两种二分查找的实现方式:迭代版和递归版。在给定有序列表`myList=[1,3,5,7,9]`中,分别使用这两种方法寻找数值3和-1的位置。对于3,两种方法都返回了位置1;而对于不存在的-1,两种方法均返回None。二分查找是一种高效的搜索算法,适用于大量数据的查找操作。
摘要由CSDN通过智能技术生成
class BinarySearch():

    
    def search_iterative(self, list, item):
    
        low = 0;
        high = len(list) - 1

        while(low<=high):

            mid = (low + high) // 2 #位置
            guess = list[mid]

            if guess == item:
                return mid  # 反悔了位置 

            if guess < item:
                low = mid + 1

            if guess > item:
                high = mid - 1

        return None

    def search_recursive(self, list, low, high, item):

        if high >= low :

            mid = (high + low) // 2
            guess = list[mid]

            if guess == item:
                return mid;

            elif guess < item:
                return self.search_recursive(list, mid+1, high, item)

            elif guess > item:
                return self.search_recursive(list, low, mid-1, item)

        else:
            return None 

    







if __name__=="__main__":
    bs = BinarySearch()
    myList = [1, 3, 5, 7, 9]

    print("方法一:", bs.search_iterative(myList,3))
    print("方法二:", bs.search_recursive(myList, 0, len(myList)-1, 3))
    # -1
    print("方法一:", bs.search_iterative(myList,-1))
    print("方法二:", bs.search_recursive(myList, 0, len(myList)-1, -1))

两种方法,二选其一:

  • def search_iterative 为普通版函数(方法1)
  • def search_recursive 为递归版函数(方法2)

测试数据:

  • 输入:myList = [1, 3, 5, 7, 9]
  • 测试数据:3,-1
  • 返回的是位置

注意

  • if name==“main”: 为两短横
  • // 为整除

【输出】

方法一: 1
方法二: 1
方法一: None
方法二: None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羊老羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值