python实现二分法查找_python--二分法查找

二分法查找又称折半查找。二分法查找是在一个有序列表的基础上完成的,要查找的值x和列表的中间值m作比较,如果x大于m,那么接下来从m+1的右区间内再以相同方法取中间值做判断,循环往复此过程,直到判断出x=m的时候就是查找成功。否则相反。返回类型为布尔值

时间复杂度为 O(logn) 空间复杂度:O(1)

两种实现二分法查找的方法:递归、非递归 代码奉上

#递归实现:

defbinary_seach(alist,item):if len(alist) ==0:returnFalseelse:

mid= len(alist) // 2 #middle 记录中间位置索引

if item == alist[mid]: #如果查找元素与中间位置元素相等 则返回真

returnTrueelif item < alist[mid]: #如果查找元素小于中间位置元素,则进行列表切片缩小列表范围

returnbinary_seach(alist[:mid],item)else:return binary_seach(alist[mid+1:],item)if __name__ == '__main__':

alist= [5, 10, 15, 18, 35, 55, 65, 75, 99]print(binary_seach(alist,200)) #查找列表中不存在的数据

print("__________________")print(binary_seach(alist,15)) #查找列表中存在的数据

#非递归实现:

defbinary_seach(alist,item):

first= 0 #起始下标为0

last = len(alist) - 1 #列表最后一位的索引

while first <= last: #列表中间位置的索引值

mid = (first + last) // 2

if item ==alist[mid]:returnTrueelif item

last= mid -1

else:

first= mid + 1

else:returnFalseif __name__ == '__main__':

alist= [5,10,15,18,35,55,65,75,99] #有序序列

print(binary_seach(alist, 200))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值