python之折半查找算法

折半查找算法也叫二分查找算法。算法的细节我就不讲了。但是必须说一下二分查找是基于我们之前的数据是有序的,如果没有序该算法是没有意义的。个人觉得代码比较直观,所以我这里就直接上代码了。

折半查找非递归算法

#折半查找非递归算法
#折半查找函数
#参数      数组 起始位置 结束位置 数据
def search(arr,start,end,data):
    while(start<=end):
        half=int((start+end)/2)
        if(arr[half][0]==data):
            return half
        elif(arr[half][0]>data):
            end=half-1
        else:
            start=half+1
    #为了防止找不到
    return -1
#打印函数
def myPrint(arr,index):
    if(index!=-1):
        name=arr[index][1]
        print('name : ',name)
    else:
        print('no found')
arr=[[201701,'张三'],[201703,'李四'],[201710,'王麻子'],[201713,'隔壁老王']]
print('search 201713')
index=search(arr,0,3,201713)
myPrint(arr,index)
print('search 2017102')
index=search(arr,0,3,2017102)
myPrint(arr,index)

输出结果

search 201713
name :  隔壁老王
search 2017102
no found

折半查找递归算法

#折半查找递归算法
#参数      数组 起始位置 结束位置 数据
def search(arr,start,end,data):
    half=int((start+end)/2)
    if(start<=end):
            #相等的时候返回位置
            if(arr[half][0]==data):
                return half
            elif(arr[half][0]>data):
                result=search(arr,start,half-1,data)
            else:
                result=search(arr,half+1,end,data)
            #因为有可能没有找到,所以这里有一个判断语句
            if(result==None):
                return -1
            else:
                return result
#打印函数
def myPrint(arr,index):
    if(index!=-1):
        name=arr[index][1]
        print('name : ',name)
    else:
        print('no found')
arr=[[201701,'张三'],[201703,'李四'],[201710,'王麻子'],[201713,'隔壁老王']]
print('search 201713')
index=search(arr,0,3,201713)
myPrint(arr,index)
print('search 2017102')
index=search(arr,0,3,2017102)
myPrint(arr,index)

结果如下:

search 201713
name :  隔壁老王
search 2017102
no found
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值