Python combate: Let algoritmo de classificação usando Matplotlib movimento

I. Introdução

algoritmo de computador da universidade que é cursos obrigatórios, enquanto algoritmo de classificação é o algoritmo o conteúdo dentro da prioridade. Aprender a programação algoritmos ajudam a melhorar a capacidade de melhorar o seu pensamento lógico, melhorar a qualidade do código. Mas realmente quer aprender o algoritmo é uma certa dificuldade. A principal razão é que o algoritmo é muito abstrata, não é fácil de entender.

Mas olhamos para este gráfico dinamicamente para atingir um bubble sort, não está se sentindo muito mais fácil de entender! ! !
Aqui Insert Picture Descrição
Estes dias estão começando a aprender o conhecimento python, o módulo de aprendizagem Matplotlib acho que nós podemos usar essa estrutura para tornar os algoritmos de ordenação de visualizar o caminho, então para estudantes e iniciantes algoritmo não seria de muita ajuda. Arregaçar as mangas e fui em frente.

Em segundo lugar, preparar

  1. matplotlib instalação
# Windows 系统安装 Matplotlib
python -m pip install -U pip setuptools
python -m pip install matplotlib

Nota: por causa da velocidade da rede doméstica, e às vezes de download vezes fora, é recomendado o uso de fontes domésticas de pip

# Windows 系统安装 Matplotlib
python -m pip install -U pip setuptools -i https://pypi.douban.com/simple
python -m pip install matplotlib -i https://pypi.douban.com/simple
  1. Um histograma
    Quanto à forma de usar Matplotlib, você pode ver o tutorial novato: NumPy Matplotlib conteúdo. O que é particularmente grande.

  2. Deixe o movimento histograma
    acima do conhecimento dentro tutorial apenas para desenhar um histograma de estática, precisamos algoritmo de ordenação para cada posição cambial são apresentados, para conseguir um efeito dinâmico. Na verdade, isso é relativamente simples, é o momento para falar sobre os resultados do desenho original apagada e redesenhada. Desenhe pausa ao longo de um determinado período de tempo, em seguida, entrar no próximo sorteio.

Não há muito a dizer, começar linha e código de barras! ! !

Em terceiro lugar, a fonte

Código de classificação algoritmo aqui eu não vou dizer, navegar na internet e você pode encontrar um monte. Aqui I usado o https://blog.csdn.net/woshichaoren1/article/details/86520233 Bowen dentro do código algoritmo, e em seguida, depois de ajustadas, como mostrado abaixo, em que um total de 4 mostra um algoritmo de visualização:

# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import random

LIST_SIZE = 40
PAUSE_TIME = 4 / LIST_SIZE


# 冒泡算法
def bubble_sort(nums):
    for i in range(len(nums) - 1):
        for j in range(len(nums) - i - 1):
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
            plt.cla()  # 清除内容
            plt.bar(range(len(nums)), nums, align='center')
            plt.bar(j, nums[j], color="r", align="center")
            plt.bar(j + 1, nums[j + 1], color="r", align="center")
            plt.pause(PAUSE_TIME)
    plt.show()


# 插入排序
def insert_sort(nums):
    for i in range(1, len(nums)):
        pos = 0
        for j in range(i - 1, -1, -1):
            if nums[i] > nums[j]:
                pos = j + 1
                break
        temp = nums[i]
        for x in range(i, pos - 1, -1):
            nums[x] = nums[x - 1]
            nums[pos] = temp
            plt.cla()  # 清除内容
            plt.bar(range(len(nums)), nums, align='center')
            plt.bar(i, nums[i], color="r", align="center")
            plt.bar(x, nums[x], color="g", align="center")
            plt.bar(pos, nums[pos], color="r", align="center")
            plt.pause(PAUSE_TIME)
    plt.show()


# 选择排序
def selection_sort(nums):
    for i in range(0, len(nums)):
        min = i
        for j in range(i + 1, len(nums)):
            if nums[j] < nums[min]:
                min = j
            plt.cla()  # 清除内容
            plt.bar(range(len(nums)), nums, align='center')
            plt.bar(i, nums[i], color="r", align="center")
            plt.bar(j, nums[j], color="r", align="center")
            plt.pause(PAUSE_TIME)
        nums[i], nums[min] = nums[min], nums[i]
    plt.show()

# 希尔排序
def shell_sort(nums):
    step = len(nums)
    while True:
        step = int(step / 3 + 1)
        for n in range(step):
            for i in range(n + step, len(nums), step):
                pos = n
                for j in range(i - step, -1, -step):
                    if nums[i] > nums[j]:
                        pos = j + step
                        break
                temp = nums[i]
                for x in range(i, pos - step, -step):
                    plt.cla()  # 清除内容
                    nums[x] = nums[x - step]
                    plt.bar(range(len(nums)), nums, align='center')
                    plt.bar(pos, nums[pos], color="r", align="center")
                    plt.bar(x, nums[x], color="r", align="center")
                    plt.pause(PAUSE_TIME)
                nums[pos] = temp
        if step <= 1:
            break
    plt.show()


if __name__ == "__main__":
    nums = []
    for i in range(LIST_SIZE):
        nums.append(random.randint(0, 1000))

    bubble_sort(nums)
    # insert_sort(nums)
    # selection_sort(nums)
    # shell_sort(nums)
    print(nums)

Em quarto lugar, os efeitos visuais

  1. algoritmo Bubble:
    Aqui Insert Picture Descrição
  2. inserção Sort
    Aqui Insert Picture Descrição
  3. seleção Classificar
    Aqui Insert Picture Descrição
  4. Classificar de hash
    Aqui Insert Picture Descrição
Publicado 19 artigos originais · ganhou elogios 67 · vê 20000 +

Acho que você gosta

Origin blog.csdn.net/m1090760001/article/details/103217052
Recomendado
Clasificación