搜索算法

搜索算法

二分查找(要求待查序列有序)
1.递归实现
1.判断中间值是否是待查数据
2.在前序列或后序列中递归查找
2.非递归实现
1.判断中间值是否是待查数据
2.向前或向后缩小范围重复步骤1
时间复杂度:O(logn)

	  	 def binary_serch(li,item):
			    # 二分查找(要求待查序列有序)
			    # 递归实现
			    n = len(li)
			    if n <= 0:
			        return False
			    # 判断中间值是否是待查数据
			    if item == li[n//2]:
			        return True
			    # 在前序列或后序列中递归查找
			    if li[n//2] > item:
			         return binary_serch(li[0:n//2],item)
			    else:
			        return binary_serch(li[n//2+1:],item)

			def binary_search2(li,item):
			    # 非递归实现
			    n = len(li)
			    start = 0
			    end = n-1
			    while start <= end:
			        mid = (start + end)//2
			        # 判断中间值是否是待查数据
			        if item == li[mid]:
			            return True
			        # 向前或向后缩小范围重复步骤1
			        if item < li[mid]:
			            end = mid-1
			        else:
			            start = mid+1
			    return False	
			if __name__ == '__main__':	    
			    li = [0,2,5,6,8,9,11,16]
			    print(binary_serch(li, 17))
			    print(binary_search2(li,36))
			    print(binary_search2(li,8))
        ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值