python写的快速排序动态演示程序
作者:野牛程序员:2023-03-01 22:53:30python阅读 2602
python写的快速排序动态演示程序
import matplotlib.pyplot as plt import random def quick_sort(data, left, right): if left >= right: return pivot = data[random.randint(left, right)] i, j = left, right while i <= j: while data[i] < pivot: i += 1 while data[j] > pivot: j -= 1 if i <= j: data[i], data[j] = data[j], data[i] i += 1 j -= 1 quick_sort(data, left, j) quick_sort(data, i, right) def show_sorting_process(data): 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('Quick Sort') plt.show(block=False) quick_sort_animation(data, 0, len(data)-1, ax) plt.show() def quick_sort_animation(data, left, right, ax): if left >= right: return pivot = data[random.randint(left, right)] i, j = left, right while i <= j: while data[i] < pivot: i += 1 while data[j] > pivot: j -= 1 if i <= j: data[i], data[j] = data[j], data[i] i += 1 j -= 1 # update the bar chart color = ['b'] * len(data) color[i-1] = 'r' color[j+1] = '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('Quick Sort (Pivot = {})'.format(pivot)) for k in range(len(data)): plt.text(k, data[k] + 1, data[k], horizontalalignment='center', fontweight='bold', color='black') plt.text(i-1, data[i-1] + 5, str(data[i-1]), horizontalalignment='center', fontweight='bold', color='black') plt.text(j+1, data[j+1] + 5, str(data[j+1]), horizontalalignment='center', fontweight='bold', color='white') plt.pause(1) quick_sort_animation(data, left, j, ax) quick_sort_animation(data, i, right, ax) if __name__ == '__main__': # Generate random data data = [random.randint(0, 100) for _ in range(10)] print('Unsorted data:', data) # Show the sorting process show_sorting_process(data) # Sort the data using quick sort quick_sort(data, 0, len(data)-1) print('Sorted data:', data)
在这个代码中,我们定义了一个名为 partition 的函数来执行分割操作。在分割过程中,我们将最后一个元素作为枢轴元素,然后遍历数组,将小于枢轴元素的元素放在数组左侧,将大于枢轴元素的元素放在数组右侧,并将枢轴元素移到正确的位置上。分割操作完成后,我们递归调用 quick_sort_animation 函数来排序左子数组和右子数组。
在 quick_sort_animation 函数中,我们首先使用 partition 函数将数组分割成两个子数组,然后用 matplotlib 显示当前状态的柱状图。在显示柱状图时,我们将枢轴元素的颜色设置为绿色。接着,我们对左子数组和右子数组分别递归调用 quick_sort_animation 函数,直到整个数组有序。在显示柱状图时,我们使用 plt.pause 函数来控制动画的速度。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:python写的桶排序动态演示程序
- 下一篇:python写的归并排序动态演示程序