📅  最后修改于: 2023-12-03 15:06:53.308000             🧑  作者: Mango
冒泡排序是最简单的排序算法之一。它重复地走访过要排序的元素列,依次比较相邻两个元素大小,如果发现逆序则交换。因为排序的过程中,较小或较大元素会经由交换慢慢"浮"到数列的顶端,故名。
在本文中,我们将使用 Python 实现冒泡排序,并通过数据可视化的方式展示排序过程。
下面是 Python 实现冒泡排序的代码:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
这个实现非常简单,它使用两个嵌套循环,每次比较相邻元素的大小,并在必要时交换它们的位置。外部循环迭代列表中的每个元素,而内部循环则从列表的开头迭代到当前未排序的最后一个元素。
我们可以使用 Python 的 matplotlib
库来可视化冒泡排序的过程。首先,我们来实现一个函数来绘制一个条形图,每个条形的高度表示相应的数字大小。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def plot_bars(arr):
fig, ax = plt.subplots()
ax.set_xticks([])
ax.set_yticks([])
ax.bar(range(len(arr)), arr)
接下来,让我们编写一个函数,该函数将冒泡排序应用于数字列表,并将排序过程可视化为动画。
def bubble_sort_visual(arr):
fig, ax = plt.subplots()
ax.set_xticks([])
ax.set_yticks([])
def update(i):
for j in range(len(arr) - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
ax.clear()
ax.bar(range(len(arr)), arr)
anim = animation.FuncAnimation(
fig,
update,
frames=len(arr) - 1,
repeat=True
)
plt.show()
在这个实现中,我们定义了一个名为 update
的函数,该函数在每个帧上被调用以更新数字列表。内部循环仍然实现比较和交换逻辑。在每次交换后,我们清除了图形,并使用 bar
函数重新绘制了条形图。
最后,我们使用 matplotlib.animation
模块的 FuncAnimation
函数来创建一个 animation
对象,并使用 show
函数显示动画。
现在,我们可以使用以下代码运行动画:
arr = [3, 2, 1, 5, 4]
bubble_sort_visual(arr)
当我们运行这段代码时,我们可以看到动画,它显示了冒泡排序算法在数字列表上的应用。
在本文中,我们使用 Python 编写了一个冒泡排序算法,并通过 matplotlib
库可视化了其排序过程。这是学习 Python 算法和数据可视化的良好实践。该技术可以应用于其他排序算法的可视化,以及可以用于其他类型的数据可视化。