二分查找(递归和非递归)python实现

定义:
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

思路:
比如说有一个列表L,里面有一组数字,并且这一组数字经过排序(L.sort()),把这个列表的长度整除二得到一个数(假设数组长度7,7//2=3),然后把这个列表看做为左边3个和右边4个,然后输入你要查找的数字,如果L[3]正好和你要查找的值(假设是x)相等,则把该值返回,如果L[3]>x,那么你所查找的值一定在L[3]的左边,然后再把左边的值做类似上边的操作。
如果L[3]<x,那么你查找的值一定在L[3]的右边,然后类推。

递归方式(输0停止输入):

def BinarySearch(L,x,low,high):
    if(low>high):
        return -1
    else:
        mid=(low+high)//2
        if(L[mid]==x):
            return mid
        elif L[mid]>x:
            return BinarySearch(L,x,low,mid-1)
        else:
            return BinarySearch(L,x,mid+1,high)
L=[]
a=int(input('请输入数据:'))
while(a!=0):
    L.append(a)
    a=int(input('请输入数据:'))
L.sort()
x=int(input('请输入查找的数据:'))
print(BinarySearch(L,x,0,len(L)-1))

非递归方法:

def BinarySearch(L,x,low,high):
        while low <= high:  
            mid = (low + high) // 2   
            if x < L[mid]: 
                high = mid - 1   
            elif x > L[mid]:   
                low = mid + 1  
            else:
                return mid  
        return -1  
L=[]
a=int(input('请输入数据:'))
while(a!=0):
    L.append(a)
    a=int(input('请输入数据:'))
L.sort()
x=int(input('请输入查找的数据:'))
print(BinarySearch(L,x,0,len(L)-1))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值