Я пытаюсь создать скрипт для визуализации алгоритмов сортировки, и я сделал свою собственную версию быстрой сортировки, но я не знаю, как правильно использовать yield для работы моего алгоритма. Вот код.
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from itertools import chain
def update_fig(vec, rects, number):
for rect, val in zip(rects, vec):
rect.set_height(val)
def quick_sort(vec):
n = len(vec)
if n <= 1:
return vec
pivot = vec[n//2]
left = []
right = []
for i in range(n):
if i == n//2:
continue
if vec[i] >= pivot:
right.append(vec[i])
else:
left.append(vec[i])
yield chain(quick_sort(left) , [pivot] , quick_sort(right))
vec = np.random.randint(1, 100, 30)
generator = quick_sort(vec)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
bar_rects = ax.bar(np.arange(1, len(vec) + 1), vec, align='center')
anim = animation.FuncAnimation(fig, func=update_fig, fargs=(bar_rects, 1), frames=generator,
interval=1, repeat=False)
plt.show()
, и это ошибка, которую я получаю:
Traceback (most recent call last):
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\cbook\__init__.py", line 216, in process
func(*args, **kwargs)
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\animation.py", line 953, in _start
self._init_draw()
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\animation.py", line 1732, in _init_draw
self._draw_frame(next(self.new_frame_seq()))
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\animation.py", line 1755, in _draw_frame
self._drawn_artists = self._func(framedata, *self._args)
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37\MyCodes\liveData.py", line 20, in update_fig
rect.set_height(val)
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\patches.py", line 815, in set_height
self._update_y1()
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\patches.py", line 745, in _update_y1
self._y1 = self._y0 + self._height
TypeError: unsupported operand type(s) for +: 'int' and 'itertools.chain'