读书总结--二分查找

《算法图解》之二分查找

感想:最近读了一本书,书名是《算法图解》个人觉得这本书挺好,里面讲了很多实用且易懂的算法,以后我会陆续的把自己的笔记搬到这上面,有兴趣的可以看一下。

二分查找:

二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回NULL。

下面的例子说明了二分查找的工作原理。随便想一个1~100的数字。你的目的是以最少的次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。下面是一个更佳的猜法。

  1. 从50开始,小了,但排除了一半的数字!至此,你知道1~50都小了。
  2. 接下来,你猜75,大了,那余下的数字又排除了一半!使用二分查找时,你猜测的是中间的数字,从而每次都将排除余下的一半的数字。
  3. 接下来,你猜测63(50和75中间的数字),大了,那余下的一半的数字又被排除了。
  4. 最后你再猜测57,(50~63中间的数字),对了!

这就是二分查找,你学会了吗?

注:仅当列表是有序的时候,二分查找才管用。

Python代码实现:

# coding=utf-8
import math
def binary_search(list,item):        # low和high用于跟踪要在其中查找的列表的部分
    low = 0
    high = len(list)-1
    while low <= high:                # 只要范围没有缩小到只包含一个元素就检查中间的元素
        mid = math.ceil((low + high)/2)   
        guess = list[mid]
        # print(guess)
        if guess == item:              # 找到了元素
            return mid
        if guess > item:               # 猜的数字大了
            high = mid - 1
        else:                          # 猜的数字小了
            low = mid + 1
    return None                       # 没有指定的元素
my_list = [1,3,5,7,9]                   # 测试一下
# print(len(my_list))
print(binary_search(my_list,3))  

结果:1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值