Python--常见查找之二分法查找

方法1:

l = [1,2,3,4,5,6,7,8,9]
find_num = int(input('请输入需要找的数字'))
start = 0
end = int(len(l))-1

while True:
    middle = int((start+end)//2)
    if l[middle] == find_num:
        print("找到您要找的数字%d在数列中的位置是%d" %(find_num,middle+1))
        break
    elif l[middle] > find_num:
        end = middle -1
    elif l[middle] < find_num:
        start = middle +1

缺点:必须为有序递减整数序列

方法2:

def bubb_sorted(a):
    if not isinstance(a,(list,set)):
        return '输入为非序列'
    for k in range(len(a)):
        if not isinstance(a[k],(int,float,complex)):
            return '序列中为非数字'
    for j in range(len(a)-1):
        for i in range(len(a)-1):
            if a[i]>a[i+1]:
                l=a[i+1]
                a[i+1]=a[i]
                a[i]=l
    return a 

	
def midd_find(List1,x):
    if not isinstance(List1,(list,set)):
        print('Error')
        return print('输入为非序列')
    if not isinstance(x,(int,float,complex)):
        print('Error')
        return print('要找的数字为非数字')
    List=bubb_sorted(List1)
    print(List)
    start_index=0
    end_index=len(List)-1
    middle_index=0
    import math
    count=math.ceil(math.log(len(List),2))
    count1=0
    while count>0:
        middle_index=(start_index+end_index)//2
        count1+=1
        if x == List[middle_index]:
            print('找到了,位置在第%s个'  %(middle_index+1))
            print('运行%s次' %count1)
            return middle_index
        elif x>List[ middle_index]:
            start_index=middle_index
        elif x<List[ middle_index]:
            end_index=middle_index
        count-=1
        if count==0:
            print('要找的数没有在序列中')
            print('运行%s次' %count1)
            return None


#midd_find([3,6,1,22,5,0,34,27],5)
#midd_find([3,6,1,22,5,0,34,27],10)
midd_find([3,6,1,22,5,0,34,27],'a')
midd_find('abc','a')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值