你“听”过这些经典排序算法吗?

大家好,欢迎来到 Crossin的编程教室 !

算法是编程知识体系中的重要部分。当你已经掌握了一些编程基础之后,必然需要了解算法相关的知识,才能可以写出效率更高的代码。而排序算法又是算法中非常基础的内容。很多面试官也会用排序来考察面试者的算法基础能力。

常见的排序算法有:冒泡排序、选择排序、插入排序、快速排序等。

初学者在刚刚接触这些算法时,可能会有一点点难度。但如果有一些直观的可视化演示,就非常有助于快速理解和掌握排序算法了。

我们用 Python 实现了一个可视化的排序算法演示程序,而且不但可“视”,还可“听”。给你们直观地展示一下 冒泡排序、选择排序、插入排序、快速排序、归并排序5种经典排序算法的执行过程。

效果展示:

【强迫症福利】你“听”过这些经典排序算法吗?

记得打开你的声音,片尾有小彩蛋

你“听”过这些经典排序算法吗?_第1张图片

你“听”过这些经典排序算法吗?_第2张图片

这几种都是经典的排序算法,关于其实现及算法复杂度的讨论在几乎每一本算法书籍上都有提及,网上直接搜索一下也可以找出无数文章,因此本篇中不再一一赘述。如果大家对算法感兴趣,可以在留言区说下,之后也会考虑写一些算法方面的内容。

此程序的想法来源于一个国外视频:

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时代下学习编程的新模式。

你“听”过这些经典排序算法吗?_第3张图片

感谢转发点赞的各位~

你可能感兴趣的:(排序算法,算法)