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联系,相互学习。