likes
comments
collection
share

Python应用实战,用动画生成冒泡排序的过程

作者站长头像
站长
· 阅读数 48

写在前言

hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎关注交流。

希望可以持续更新一些有意思的文章,如果觉得还不错,欢迎点赞关注,有啥想说的,可以留言或者私信交流。

如果你想看什么主题的文章,欢迎留言交流,关注公号【一点sir】,领取编程资料。

如果你还不了解Python这门语言,要系统性的学习 Python 这门语言,可以查看我的专栏——《Python教程

今天更新的文章是《Python应用实战,用动画生成冒泡排序的过程》。

Python应用实战,用动画生成冒泡排序的过程

冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

用Python实现冒泡排序

现在我们用Python语言来实现一个冒泡排序,这个应该是很简单的,以下是代码,应该很好理解吧。

def bubble_sort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # Last i elements are already in place
        for j in range(0, n-i-1):
            # 遍历数组从0到n-i-1
            # 交换如果元素大于下一个元素
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

# 测试冒泡排序函数
arr = [64, 34, 25, 12, 22, 11, 90, 1, 10, 33]
sorted_arr = bubble_sort(arr)
print("Sorted array is:", sorted_arr)

在这个例子中,bubble_sort 函数接受一个列表 arr 作为参数,并在原地进行排序。函数首先获取列表的长度 n,然后使用两个嵌套的循环来遍历列表中的每个元素。外层循环负责遍历整个列表,内层循环则负责比较相邻的元素并在需要时交换它们。

冒泡排序并不是一个高效的排序算法,尤其是对于大型数据集。它的平均时间复杂度和最坏时间复杂度都是 O(n^2),其中 n 是列表中的元素数量。对于实际应用,通常会选择更高效的排序算法,如快速排序、归并排序或堆排序。

用动画实现冒泡排序

要想用动画的方式实现冒泡排序,首先需要选择一个好用的可视化的第三方Python库,这里我们可以使用 matplotlib 库来创建一个简单的可视化效果。

首先,确保你你的环境已经安装了 matplotlib 库。如果还没有安装,可以通过以下命令安装:

pip install matplotlib

下面我们是直接给出实现的代码,后面我们给出详细的解释。

import matplotlib.pyplot as plt
import matplotlib.animation as animation

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]
                yield arr.copy()

def update(data):
    # 更新图形,重新绘制数据
    global step_count
    for rect, val in zip(bar_rects, data):
        rect.set_height(val)

    plt.title(f"Step {step_count}")
    step_count += 1

data = [64, 34, 25, 12, 22, 11, 90, 1, 10, 33]

fig, ax = plt.subplots()
bar_rects = ax.bar(range(len(data)), data, align="edge")

# 设置初始步数
step_count = 1

# 创建动画对象
anim = animation.FuncAnimation(
    fig, update, frames=bubble_sort(data.copy()),
    repeat=False, interval=500
)
anim.save('bubble_sort.gif')

来看下生成的效果: Python应用实战,用动画生成冒泡排序的过程

代码解释

上面我们最核心的主要部分是matplotlib库中的FuncAnimation类,这是用于创建动画的类,它允许用户通过指定更新函数和帧生成器函数来生成动画。以下是这个类的接口的参数。

FuncAnimation(fig, func, frames, init_func=None, fargs=None, repeat=False, repeat_delay=0, blit=False, interval=200)

fig:需要绘制动画的图形对象
func:更新函数,每次动画更新时调用该函数
frames:帧生成器函数,用于生成动画的每一帧
init\_func:初始化函数,用于绘制静态内容
fargs:更新函数`func`的参数
repeat:是否重复播放动画
repeat\_delay:重复播放时的延迟时间
blit:是否仅绘制变化的部分,可以提高动画绘制效率
interval:每帧的间隔时间(毫秒)

在上面的示例代码中,我们使用了FuncAnimation方法来创建动画对象,传入了画布对象fig、更新函数update、排序生成器函数bubble_sort(data.copy())、禁止重复播放(repeat=False)、以及每帧间隔500ms(interval=500)。

FuncAnimation方法在后台会不断调用更新函数update和帧生成器函数bubble_sort(data.copy()),并根据每一帧的数据更新图形。

转载自:https://juejin.cn/post/7372469848343953442
评论
请登录