📅  最后修改于: 2023-12-03 14:54:42.650000             🧑  作者: Mango
插入排序是一种常见的排序算法,它的原理是依次将每个元素插入到已经排好序的部分中间。具体流程如下:
插入排序的时间复杂度为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库可以简化绘制过程,实现可视化效果。