python写的树形选择排序动态演示程序
作者:野牛程序员:2023-03-02 09:29:55python阅读 2785
在同一个窗口中刷新数据,可以将 fig, ax = plt.subplots() 这一行代码移到主函数中,在主函数中创建一个图形窗口并传递给 tree_selection_sort() 函数。
在 tree_selection_sort() 函数中,需要将 ax 参数添加到函数定义中,并将创建图形窗口的代码删除。然后,在排序过程中,可以使用 ax.clear() 方法清除图形窗口并重新绘制排序后的数据。
这个代码将创建一个图形窗口,显示未排序的数据,然后在同一个窗口中进行排序,并实时更新图表以显示排序过程。最后,它将打印出排序后的数据,并保持图形窗口打开以便查看结果。
import matplotlib.pyplot as plt
import random
def tree_selection_sort(data, ax):
n = len(data)
sorted_idx = n - 1
while sorted_idx > 0:
max_idx = 0
for i in range(1, sorted_idx+1):
if data[i] > data[max_idx]:
max_idx = i
data[max_idx], data[sorted_idx] = data[sorted_idx], data[max_idx]
# Update the plot
color = ['b'] * len(data)
color[max_idx] = 'r'
color[sorted_idx] = 'g'
ax.clear()
ax.bar(range(len(data)), data, color=color)
ax.set_xlim(0, len(data))
ax.set_ylim(0, max(data) + 10)
for k in range(len(data)):
ax.text(k, data[k] + 1, data[k], horizontalalignment='center', fontweight='bold', color='black')
ax.text(max_idx, data[max_idx] + 5, str(data[max_idx]), horizontalalignment='center', fontweight='bold', color='white')
ax.text(sorted_idx, data[sorted_idx] + 5, str(data[sorted_idx]), horizontalalignment='center', fontweight='bold', color='white')
plt.pause(3)
sorted_idx -= 1
if __name__ == '__main__':
# Generate random data
data = [random.randint(0, 100) for _ in range(10)]
print('Unsorted data:', data)
# Create a figure window
fig, ax = plt.subplots()
ax.set_xlim(0, len(data))
ax.set_ylim(0, max(data) + 10)
plt.title('Tree Selection Sort')
# Sort the data using tree selection sort
tree_selection_sort(data, ax)
# Show the final sorted data
print('Sorted data:', data)
# Keep the plot window open
plt.show()下面这个代码,每趟排序都会生成新的窗体,不利于观察:
import matplotlib.pyplot as plt
import random
def tree_selection_sort(data):
n = len(data)
sorted_idx = n - 1
while sorted_idx > 0:
max_idx = 0
for i in range(1, sorted_idx+1):
if data[i] > data[max_idx]:
max_idx = i
data[max_idx], data[sorted_idx] = data[sorted_idx], data[max_idx]
# plot the sorting process
fig, ax = plt.subplots()
ax.bar(range(len(data)), data)
ax.set_xlim(0, len(data))
ax.set_ylim(0, max(data) + 10)
plt.title('Tree Selection Sort')
plt.show(block=False)
color = ['b'] * len(data)
color[max_idx] = 'r'
color[sorted_idx] = 'g'
ax.clear()
ax.bar(range(len(data)), data, color=color)
ax.set_xlim(0, len(data))
ax.set_ylim(0, max(data) + 10)
plt.title('Tree Selection Sort')
for k in range(len(data)):
plt.text(k, data[k] + 1, data[k], horizontalalignment='center', fontweight='bold', color='black')
plt.text(max_idx, data[max_idx] + 5, str(data[max_idx]), horizontalalignment='center', fontweight='bold', color='white')
plt.text(sorted_idx, data[sorted_idx] + 5, str(data[sorted_idx]), horizontalalignment='center', fontweight='bold', color='white')
plt.pause(1)
sorted_idx -= 1
if __name__ == '__main__':
# Generate random data
data = [random.randint(0, 100) for _ in range(10)]
print('Unsorted data:', data)
# Sort the data using tree selection sort
tree_selection_sort(data)
print('Sorted data:', data)野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

