python 二分查找计算法

有这样一个列表,让你从这个列表中找到66的位置,你要怎么做?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

首先想到的是:print(l.index(66))

这是python给你提供这个方法,如果没有这个方法,我们该当如何....................

下面通过二分查找计算法进行实现:

什么是二分计法?     答:去百度,百度解释比我更详细。

代码如下:

class Find:
    def find(self,l,aim,start = None,end = None):
        start = 0 if start is None else start
        end = len(l)-1 if end is None else end
        min = (end - start) // 2 + start        # 计算中间值
        if start <= end:                     
            if l[min] < aim:
                return self.find(l,aim,min+1,end)
            if l[min] > aim:
                return self.find(l,aim,start,min-1)
            else:
                return min
        else:
            return '找不到这个值'
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
f = Find()
ret = f.find(l,66)
print(ret)
print(l.index(66))    # 验证结果

分析过程,知道怎么实现的很重要,了解每步怎么运行很关键。

重点:1、计算中间值,要知道为什么+start  ???

2、为什么 len(l)-1   ????

3、程序用到了递归函数,要知道何为递归函数??

4、l[min] 与 aim 对比后,知道start 和 end 该如何变化 ????

这个过程还有不懂的可以留言,或者QQ联系,相互学习。

 

posted @ 2019-08-16 22:19  自在呼吸  阅读(183)  评论(0)    收藏  举报