Bei der Suche nach Sortieralgorithmen im Internet sehen wir häufig Animationen, die das Verhalten der Algorithmen visualisieren. Ich dachte, es wäre interessant, wenn ich eine solche Animation selbst machen könnte, also habe ich versucht, matplotlib zu verwenden.
[Blasensortierung](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3% Dies ist der Code, der das Verhalten von 83% 88) an eine GIF-Animation ausgibt.
import matplotlib.pyplot as plt
import matplotlib.animation as ani
from random import shuffle
COLOR_PINK = '#ffc0cb'
COLOR_GOSSIP = '#cbffc0'
def draw_bar(li, color=COLOR_PINK):
x_axis = list(range(1, len(li) + 1))
plt.bar(x_axis, li,
tick_label=li, align='center', width=0.4, color=color)
def draw_frame(frame, sorted_li, steps):
plt.clf()
li = steps[frame]
options = {'color': COLOR_GOSSIP} if li == sorted_li else {}
draw_bar(steps[frame], **options)
def bubble_sort(li):
sorted_li = list(li)
steps = []
for i in range(0, len(sorted_li)):
for j in range(1, len(sorted_li) - i):
if sorted_li[j - 1] > sorted_li[j]:
sorted_li[j], sorted_li[j - 1] = sorted_li[j - 1], sorted_li[j]
if len(steps) == 0 or steps[-1] != sorted_li:
steps.append(list(sorted_li))
return sorted_li, steps
if __name__ == '__main__':
li = list(range(1, 11))
shuffle(li)
sorted_li, steps = bubble_sort(li)
fig = plt.figure(figsize=(6.0, 6.0))
#Lassen Sie das Sortierergebnis in der Animation um 5 Frames länger erscheinen.
# FuncAnimation()Wiederholen_Es gibt eine Verzögerungsoption, die jedoch nicht funktioniert.
steps = steps + [steps[-1]] * 5
anim = ani.FuncAnimation(fig, draw_frame,
fargs=(sorted_li, steps), frames=len(steps))
anim.save('bubble_sort.gif', writer='imagemagick', fps=5)