吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1133|回复: 17
收起左侧

[Python 原创] 用python生成快速排序动画

[复制链接]
backaxe 发表于 2023-11-13 11:20
用Python的matplotlib库来创建动画,实现快速排序并将其过程动态可视化。
[Python] 纯文本查看 复制代码
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[end]

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

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

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

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

# 创建随机数据
data = [x for x in range(1, 31)]
shuffle(data)

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

# 生成动画
animate(frames)


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

免费评分

参与人数 3吾爱币 +9 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
haixian + 1 + 1 谢谢@Thanks!
mjst2311 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Light紫星 发表于 2023-11-13 14:31
字体全是白色的,要选中才能看见,楼主改一下?
CrashOn42 发表于 2023-11-13 14:39
ly871108 发表于 2023-11-13 14:58
cainiaochaocai 发表于 2023-11-13 15:01
跑了一下,完美
Figure_1.png
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

谢谢分享了!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表