📜  排序算法可视化:插入排序(1)

📅  最后修改于: 2023-12-03 14:54:42.650000             🧑  作者: Mango

排序算法可视化:插入排序

简介

插入排序是一种常见的排序算法,它的原理是依次将每个元素插入到已经排好序的部分中间。具体流程如下:

  1. 将第一个元素视为已排序部分;
  2. 依次将后面的元素插入到已排序部分中,确保插入后依然有序;
  3. 最后得到完全有序的数组。

插入排序的时间复杂度为O(n^2),相对于其他常见排序算法,它比较简单易懂,有利于初学者理解排序算法的过程。

可视化演示

下面演示一个插入排序的可视化演示程序,该程序采用Python语言编写,使用了Pygame库进行可视化绘制。

# 插入排序可视化演示程序

import random
import pygame

# 配置参数
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
BORDER_WIDTH = 10
BAR_WIDTH = 10
BAR_PADDING = 2
BAR_COUNT = (SCREEN_WIDTH - BORDER_WIDTH * 2) // (BAR_WIDTH + BAR_PADDING)
DELAY_TIME = 10
BAR_COLORS = {
    "sorted": (0, 192, 0),
    "selected": (192, 0, 0),
    "normal": (192, 192, 192)
}

# 初始化Pygame窗口
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Insertion Sort Visualization")
font = pygame.font.Font(None, 30)

# 生成随机数组
arr = [random.randint(1, SCREEN_HEIGHT - BORDER_WIDTH * 2) for _ in range(BAR_COUNT)]

# 输出调试信息
print(arr)


def draw_bars():
    """
    绘制柱形图
    """
    for i in range(BAR_COUNT):
        x = BORDER_WIDTH + i * (BAR_WIDTH + BAR_PADDING)
        y = SCREEN_HEIGHT - BORDER_WIDTH
        color = BAR_COLORS["normal"]
        if i in (idx1, idx2):
            color = BAR_COLORS["selected"]
        if i < pos:
            color = BAR_COLORS["sorted"]
        pygame.draw.rect(screen, color, (x, y - arr[i], BAR_WIDTH, arr[i]))


# 主循环
pos = 0
idx1 = idx2 = -1
finished = False
while not finished:
    # 处理Pygame事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            finished = True

    # 计算下一个状态
    if pos < BAR_COUNT:
        value = arr[pos]
        idx1 = pos
        while idx1 > 0 and value < arr[idx1 - 1]:
            arr[idx1] = arr[idx1 - 1]
            idx1 -= 1
        arr[idx1] = value
        pos += 1
        idx2 = idx1

    # 绘制视图
    screen.fill((255, 255, 255))
    draw_bars()
    label = font.render("Insertion Sort", True, (0, 0, 0))
    screen.blit(label, (BORDER_WIDTH, BORDER_WIDTH))
    pygame.display.flip()

    # 延时
    pygame.time.wait(DELAY_TIME)

# 退出Pygame
pygame.quit()

运行该程序,将得到以下结果:

插入排序可视化演示

总结

插入排序是一种简单易懂的排序算法,通过本文的可视化演示程序,我们可以更直观地了解插入排序的实现过程。使用Pygame库可以简化绘制过程,实现可视化效果。