大家好,欢迎来到 Crossin的编程教室 !
算法是编程知识体系中的重要部分。当你已经掌握了一些编程基础之后,必然需要了解算法相关的知识,才能可以写出效率更高的代码。而排序算法又是算法中非常基础的内容。很多面试官也会用排序来考察面试者的算法基础能力。
常见的排序算法有:冒泡排序、选择排序、插入排序、快速排序等。
初学者在刚刚接触这些算法时,可能会有一点点难度。但如果有一些直观的可视化演示,就非常有助于快速理解和掌握排序算法了。
我们用 Python 实现了一个可视化的排序算法演示程序,而且不但可“视”,还可“听”。给你们直观地展示一下 冒泡排序、选择排序、插入排序、快速排序、归并排序5种经典排序算法的执行过程。
效果展示:
【强迫症福利】你“听”过这些经典排序算法吗?
记得打开你的声音,片尾有小彩蛋
这几种都是经典的排序算法,关于其实现及算法复杂度的讨论在几乎每一本算法书籍上都有提及,网上直接搜索一下也可以找出无数文章,因此本篇中不再一一赘述。如果大家对算法感兴趣,可以在留言区说下,之后也会考虑写一些算法方面的内容。
此程序的想法来源于一个国外视频:
https://www.bilibili.com/video/av685670
实现原理:
演示代码主要用到两个库:matplotlib 和 pyaudio。
matplotlib 是一个广泛使用的 Python 图表库,这里我们用其中的 animation 实现动画效果。
核心代码片段:
from matplotlib import animation
anis = animation.FuncAnimation(
self.fig,
self._animate,
init_func=self._ini_animate,
frames=self.frames,
interval=self.interval,
repeat=False
)
# anis.save("a.gif", writer='imagemagick', fps=60, bitrate=-1)
plt.show()
FuncAnimation可以生成基于图表的动画。其中主要起作用的是第二个参数,需要提供一个函数用来指定动画中每一帧的数据。
pyaudio 库则用来实现排序时的音效。
核心代码片段:
import pyaudio
from makesound import play_tone
self.stream = self.audio.open(format=pyaudio.paFloat32,
channels=1, rate=44100, output=1)
play_tone(self.stream, frequency=f)
play_tone 函数根据传递的 frequency 参数,播放不同频率的音调。在程序中,频率是由排序时操作的对应数值计算得到。
使用方法:
程序中还应用了 fire 库,以实现通过命令行+参数的方式运行。
运行示例:
$ python start.py sortex quick_sort
其中第2个参数为排序算法,对应值为:
冒泡排序 - bubble_sort
选择排序 - select_sort
插入排序 - insert_sort
快排 - quick_sort
归并排序 - merge_sort
此外,还支持自定义参数,用来设定排序的原始序列、动画间隔等:
$ python start.py sortex quick_sort [1,3,5,4,2,6]
$ python start.py sortex quick_sort --interval=50
完整代码已上传 github。如果你对排序算法还不熟悉,可以尝试修改下代码里的排序数据、执行速度等参数,观察不同排序算法的过程和效率,以便于对这些排序算法的理解。而如果你已经对算法有一定了解,则可以考虑在此框架上增加更多的算法演示。
本程序主体代码和可视化部分由 @Provin.M 实现。
源码:snippet/algo.vi at master · crossin/snippet · GitHub
Crossin的新书《码上行动:零基础学会PYTHON编程(CHATGPT版)》已经上市了。
本书力求做到浅显易懂,让完全没有编程经验的零基础“小白”也能学会Python。内容从环境搭建这种最基础的步骤开始讲起,逐渐深入到常见的实际应用当中。在讲解知识点的同时配有相应的代码示例,让读者可以边学边练加深理解。
全书涵盖Python环境搭建、基础语法、常见数据类型、实用模块、正则表达式、面向对象编程、多任务编程等知识点。另外还提供了爬虫、GUI、游戏三个实战项目。
书中还创新地使用 ChatGPT 作为编程学习的辅助,带领读者探索AI时代下学习编程的新模式。
感谢转发和点赞的各位~