python实现二分查找算法_笔记:Python实现二分查找算法

在一个有序序列alist 中查找某个元素item,则可以让item首先和alist 的中间元素比较:

 如果相等,则成功;

 如果小于中间元素,则在alist 的左半区间查找;

 如果大于等于中间元素,则在alist 的右边半区间查找。

如图所示,是在一个有序序列中查找25 的过程。

3fbe1d0ad182

以上查找过程是利用一个循环迭代过程,通过不断更新区间的左右位置L、H 和中间位置Middle这3 个指示器来查找。程序如下:

def binarySearch(alist, value):

L = 0 #区间左端点

H = len(alist)-1 #区间右端点

found =False

while L<=H:

Middle = (L+H)//2 #Middle 指向区间的中点

if alist[Middle] == value: #等于Middle 指向的元素,找到了

return Middle

else:

if value < alist[Middle]:

H = Middle-1 #在左区间查找

else:

L = Middle+1 #在右区间查找

return -1

testlist = [5,7,12,25,34,37,43,46,58,80,82,105]

print(binarySearch(testlist, 25))

print(binarySearch(testlist, 13))

输出:

3

-1

3fbe1d0ad182

表明在位置3找到了25,在列表中没有13这个数值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值