backaxe 发表于 2023-11-13 11:20

用python生成快速排序动画

用Python的matplotlib库来创建动画,实现快速排序并将其过程动态可视化。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from random import shuffle

def quicksort(arr, start, end, frames):
    if start >= end:
      return

    pivot_index = partition(arr, start, end)
    frames.append(arr[:])

    quicksort(arr, start, pivot_index-1, frames)
    quicksort(arr, pivot_index+1, end, frames)

def partition(arr, start, end):
    pivot_index = start
    pivot = arr

    for i in range(start, end):
      if arr < pivot:
            arr, arr = arr, arr
            pivot_index += 1
    arr, arr = arr, arr
    return pivot_index

def animate(frames):
    fig, ax = plt.subplots()
    ax.set_title("Quick Sort")
    bar_rects = ax.bar(range(len(frames)), frames, align="edge")

    def update_fig(frame, rects, iteration):
      for rect, val in zip(rects, frame):
            rect.set_height(val)
      iteration += 1
      return rects

    anim = animation.FuncAnimation(fig, func=update_fig,
                                 fargs=(bar_rects, ),
                                 frames=frames, interval=50,
                                 repeat=False)
    plt.show()

# 创建随机数据
data =
shuffle(data)

# 排序过程中的所有状态
frames = []
quicksort(data, 0, len(data)-1, frames)

# 生成动画
animate(frames)


快速排序的逻辑被封装在quicksort函数中,animate函数用于创建和显示排序过程的动画。可以通过修改data列表来改变输入数据,或者调整interval参数来改变动画的速度。

Light紫星 发表于 2023-11-13 14:31

字体全是白色的,要选中才能看见,楼主改一下?

CrashOn42 发表于 2023-11-13 14:39

我来试试,能不能跑{:1_918:}

ly871108 发表于 2023-11-13 14:58

感谢分享

cainiaochaocai 发表于 2023-11-13 15:01

跑了一下,完美

15503934667 发表于 2023-11-13 15:12

大佬就是厉害

mjst2311 发表于 2023-11-13 15:18

已复制,我试试去

haririhari 发表于 2023-11-13 15:24

试一下看看

q382668261 发表于 2023-11-13 16:43

作者好厉害6了

kong3720 发表于 2023-11-13 17:16


谢谢分享了!
页: [1] 2
查看完整版本: 用python生成快速排序动画