确定该期间的中间位置K
(2)将查找的值T与K比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:
K>T 由数组的有序性可知;故新的区间为[T,L[-1]]
K<T 类似上面查找区间为0-T。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半。递归找,即可。
''' 二分法''' #用递归的方法不断搜索
# L=[1,2,10,30,33,99,101,200,301,311,402,403,500,900,1000] #从小到大排列的数字列表
#
# def find(x,y):
# k = len(y)
# m =k // 2
# print(m)
# o = y[m]
# print('oooo',o)
# if x > o:
# y = y[m:]
# if len(y) == 2:
# exit(y)
# find(x,y)
# elif x < o:
# y = y[:m]
# if len(y) == 2:
# exit(y)
#
# find(x,y)
# else:
# print('找到了')
#
# find(3,l)
# 结果:
# [2, 10]
# 7
# oooo 200
# 3
# oooo 30
# 1
# oooo 2
生成器的send方法
'''yield from'''
# import time
# def inner():
# for i in range(5):
# yield i
#
#
# def quot():
# g_inner = inner()
# while True:
# print(time.time())
# res =g_inner.send(None) #在这里的send(None)就是相当于next(g_inner)
# print('===',res)
# print(time.time())
# yield res
#
# q_outer = quot()
# while True:
# try:
# print(q_outer.send(None))
# except StopIteration:
# break
'''杨辉三角'''
# def triangles(max):
# L = [1]
# while True:
# yield (L) # generator生成器会存下这个L
# if len(L) >= max:
# break
# L.append(0) # 注意:每次产生一列的时候,紧接着就是在这一列的后面追加一个0元素以作为新的列的基础
# L = [L[n - 1] + L[n] for n in range(len(L))]
#
#
# for i in triangles(8):
# print(i)