顺晟科技
2021-06-16 10:38:50
145
折半查找是算法中减治策略的基本例子,实现起来也很简单,但是在网上看到的图片教程不觉得很乾巴麽?
在这里插入图片描述
这是一个简单的实现:
极好的缩减(列表,k):
'''
:参数列表:元素列表
:param k:查找元素
:return: int,list
'''
list _ disasts=[list]
低=0
高=len(列表)- 1
而低=高:
mid=int((低高)/2)
如果k列出[mid]:
高=中间一
list _ distributes。追加(列表[低:高1])
elif k list[mid]:
低=中间一
list _ distributes。追加(列表[低:高1])
else:
返回中间1,列表分散
返回0,[]
if __name__=='__main__':
# list=list(map(float,input(')请按顺序输入要查找的表(以空格隔开):').split()))
列表=[_ for _ in范围(31)]
k=float(输入(请输入想要查找的数字:'))
数量,列表分散=减少(列表,k)
if num!=0:
"打印("这个数字是你输入的数字的第{}个。格式(数字))
if len(list _ disasts[-1])!=1:
list _ disasts。追加([k])
else:
及格
else:
"打印("查找失败!)
在这里插入图片描述
结果就一个这,多干巴…
所以我整了个这:(这个可交换的图像格式爲了能看的更加清晰,我设置的帧与帧间隔时间有点长(5秒),你们可别以爲是静态图啊…)
(这个例子和上面一样,是0~30一共31个有序的点,查找第18个(序号爲17))
在这里插入图片描述
怎麽生成的呢?我用的是matplotlib.animation中的功能动画画动态图:
先上源码:
将matplotlib.pyplot导入为血小板计数
导入matplotlib.animation作为动画
极好的缩减(列表,k):
'''
:参数列表:元素列表
:param k:查找元素
:return: int,list
'''
list _ disasts=[list]
低=0
高=len(列表)- 1
而低=高:
mid=int((低高)/2)
如果k列出[mid]:
高=中间一
list _ distributes。追加(列表[低:高1])
elif k list[mid]:
低=中间一
list _ distributes。追加(列表[低:高1])
else:
返回中间1,列表分散
返回0,[]
def draw(list _ disasts):
'''
:参数列表_分散列表:
:return: gif
'''
图,ax=plt。支线剧情()
def init():
# 初始化函数用于绘製一块乾淨的画布,爲后续绘图做准备
斧头刺[右]。set_color('none ')
斧头[顶]刺.set_color('none ')
斧头[左]刺.set_color('none ')
极好的更新(列表):
PLT。distribute(list,[0 for _ in range(len(list))],s=1/len(list)* 300)
' plt.title('还剩{}个点。格式(len(list)))
plt.yticks(())
ani=动画。函数动画(fig,update,frames=list _ disasts,init_func=init,interval=5000)
ani.save('123.gif ',writer='抱枕)
if __name__=='__main__':
# list=list(map(float,input(')请按顺序输入要查找的表(以空格隔开):').split()))
列表=[_ for _ in范围(31)]
k=float(输入(请输入想要查找的数字:'))
数量,列表分散=减少(列表,k)
if num!=0:
"打印("这个数字是你输入的数字的第{}个。格式(数字))
if len(list _ disasts[-1])!=1:
list _ disasts。追加([k])
else:
及格
#打印(列表分散)
绘制(列表分散)
else:
"打印("查找失败!)
然后再说功能动画的参数:
个无花果可以理解爲动画所在的画布;
第二个更新就是每一帧的函数;
第三个框架传入的是更新的参数;
第四个init_func是初始化的图形(代码中对比的是初始化函数(去除上、左、右边框));
第五个间隔就是帧与帧之间的间隔(延时(我这里设置的是5秒));
…
还有一些其他的参数我没有用到,可以去看官方文档
02
2022-09
02
2022-09
16
2021-06
16
2021-06
16
2021-06
16
2021-06