当前位置:首页python > 正文

用python 写一个选择排序的演示动画

作者:野牛程序员:2023-03-01 19:15:36python阅读 2608


以下是一个用 Python 实现的选择排序演示动画:


import matplotlib.pyplot as plt
import time
import random

def selection_sort(data):
    for i in range(len(data)):
        min_index = i
        for j in range(i+1, len(data)):
            if data[j] < data[min_index]:
                min_index = j
        data[i], data[min_index] = data[min_index], data[i]

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('Selection Sort')
    plt.show(block=False)

    for i in range(len(data)):
        min_index = i
        for j in range(i+1, len(data)):
            # compare
            color = ['b'] * len(data)
            color[i] = 'r'
            color[j] = '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('Selection Sort (Round {})'.format(i+1))
            for k in range(len(data)):
                plt.text(k, data[k] + 1, data[k], horizontalalignment='center', fontweight='bold', color='black')
            plt.text(i, data[i] + 5, str(data[i]), horizontalalignment='center', fontweight='bold', color='black')
            plt.text(j, data[j] + 5, str(data[j]), horizontalalignment='center', fontweight='bold', color='white')
            plt.pause(1)

            if data[j] < data[min_index]:
                min_index = j

        # swap
        data[i], data[min_index] = data[min_index], data[i]

        # update the bar chart
        ax.clear()
        color = ['b'] * len(data)
        color[i] = 'r'
        color[min_index] = 'g'
        ax.bar(range(len(data)), data, color=color)
        ax.set_xlim(0, len(data))
        ax.set_ylim(0, max(data) + 10)
        plt.title('Selection Sort (Round {})'.format(i+1))
        for k in range(len(data)):
            plt.text(k, data[k] + 1, data[k], horizontalalignment='center', fontweight='bold', color='black')
        plt.text(i, data[i] + 5, str(data[i]), horizontalalignment='center', fontweight='bold', color='black')
        plt.text(min_index, data[min_index] + 5, str(data[min_index]), horizontalalignment='center', fontweight='bold', color='white')
        plt.pause(1)

    plt.show()

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 selection sort
    selection_sort(data)

    print('Sorted data:', data)
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击