📌  相关文章
📜  在Python中使用 Matplotlib 进行快速排序的 3D 可视化(1)

📅  最后修改于: 2023-12-03 15:23:25.930000             🧑  作者: Mango

在Python中使用 Matplotlib 进行快速排序的 3D 可视化

如果您正在学习算法和数据结构,那么快速排序一定是您必须学习的算法之一。通过使用 Matplotlib 库,我们可以将快速排序变得更有趣并更加可视化。在本文中,我们将使用 Python 和 Matplotlib 库创建一个快速排序的 3D 可视化。

什么是快速排序?

快速排序是一种基于分治思想的高效排序算法。它的基本思想是选定一个枢轴元素并将其它元素分为左右两个区间,然后对左右两个区间递归地进行快速排序,直到每个区间只剩下一个元素为止。

Matplotlib 库简介

Matplotlib 是 Python 中一个非常流行的可视化库。它可以绘制各种类型的图表,包括线条、柱形图和散点图等。除此之外,Matplotlib 还支持绘制 3D 图表,使得数据的可视化更加生动。

创建一个基本的 3D 图表

要开始创建快速排序的 3D 可视化,我们首先需要安装 Matplotlib 库。安装好之后,我们可以使用以下代码创建一个基本的 3D 图表:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
z = [1, 2, 3, 4, 5]

ax.scatter(x, y, z, c='r', marker='o')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()

在这个例子中,我们创建了一个包含 x、y 和 z 坐标轴的 3D 图表,并使用红色圆形表示 5 个点。

实现快速排序的 3D 可视化

有了基本的 3D 图表,我们接下来要做的就是实现快速排序,并将排序过程以 3D 动画的形式展示出来。下面是一个简化版的快速排序算法:

def quick_sort(array, left, right):
    if left >= right:
        return
    
    pivot = array[left]
    t_left = left + 1
    t_right = right
    
    while t_left <= t_right:
        while t_left <= t_right and array[t_left] <= pivot:
            t_left += 1
        while t_left <= t_right and array[t_right] >= pivot:
            t_right -= 1
        if t_left <= t_right:
            array[t_left], array[t_right] = array[t_right], array[t_left]
            
    array[left], array[t_right] = array[t_right], array[left]
    quick_sort(array, left, t_right-1)
    quick_sort(array, t_right+1, right)

然后我们来看看如何将快速排序的过程可视化。将以下代码添加到上面的 3D 图表代码后:

from time import sleep

def update_graph(x, y, z, colors):
    ax.cla()
    ax.scatter(x, y, z, c=colors, marker='o')
    ax.set_xlabel('X Label')
    ax.set_ylabel('Y Label')
    ax.set_zlabel('Z Label')

def quick_sort_visualization(array, left=0, right=None):
    if right is None:
        right = len(array) - 1
        
    if left >= right:
        return
    
    pivot = array[left]
    t_left = left + 1
    t_right = right
    
    colors = ['g'] * len(array)
    colors[left] = 'r'
    
    while t_left <= t_right:
        colors[t_left] = 'b'
        colors[t_right] = 'b'
        update_graph(array, range(len(array)), colors, colors)
        sleep(0.5)
        colors[t_left] = 'g'
        colors[t_right] = 'g'
        
        while t_left <= t_right and array[t_left] <= pivot:
            t_left += 1
        while t_left <= t_right and array[t_right] >= pivot:
            t_right -= 1
        if t_left <= t_right:
            array[t_left], array[t_right] = array[t_right], array[t_left]
            
    array[left], array[t_right] = array[t_right], array[left]
    
    colors = ['g'] * len(array)
    quick_sort_visualization(array, left, t_right-1)
    quick_sort_visualization(array, t_right+1, right)

然后我们就可以使用以下代码来调用快速排序可视化了:

array = [35, 24, 12, 76, 98, 11, 28, 67, 48]
quick_sort_visualization(array)

在这个例子中,我们使用了一个含有 9 个元素的列表。我们可以看到,当快速排序正在进行时,每个元素的颜色都会发生变化,以反映它们的状态。

结论

在本文中,我们通过使用 Python 和 Matplotlib 库来创建了一个简单的快速排序的 3D 可视化程序。这个程序不仅可以让您更好地理解快速排序的工作原理,还可以让学习过程变得更加有趣和生动。