18910140161

Python实现折半查找并用matplotlib实现动态过程可视化

顺晟科技

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秒));

还有一些其他的参数我没有用到,可以去看官方文档

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航