使用 PyGame 的冒泡排序可视化工具

原文地址

在本文中,我们将看到如何使用 PyGame 可视化冒泡排序算法,即当 pygame 应用程序启动时,我们可以看到具有不同高度的未排序条,当我们单击空格键时,它开始以冒泡排序方式排列,即在每次迭代最大值元素应该最后出现。

冒泡排序是一种简单的算法,用于对一组给定的 n 个元素进行排序,这些元素以具有 n 个元素的数组的形式提供。冒泡排序将所有元素一一比较,并根据它们的值对它们进行排序。

实施步骤:

  1. 创建一个主窗口
  2. 用黑色填充主窗口
  3. 创建一个方法来显示在它们之间有特定间隙的条形列表
  4. 获取用户输入的键
  5. 如果按下空格键启动排序过程
  6. 对列表执行冒泡排序算法
  7. 每次内部迭代后,用黑色填充屏幕并调用 show 方法以条形的形式显示迭代列表。

下面是实现

# 导入 pygame
import pygame
import random

pygame.init()

# 设置窗口的尺寸
win = pygame.display.set_mode((440, 400))

# 设置窗口的标题
pygame.display.set_caption("冒泡排序")

# 初始位置
x = 40
y = 40

# 每个条形的宽度
width = 20

# 条形高度列表 (数据需要排序)
# height = [200, 50, 130, 90, 250, 61, 110, 88, 33, 80, 70, 159, 180, 20]
height = []
while len(height) <= 12:
    n = random.randrange(20,200)
    if n not in height:
        height.append(n)


run = True

# 绘制height列表中数据表示的条形图
def show(height):

	# 逐项迭代height列表
	for i in range(len(height)):

		# 绘制每一个列表数据
		pygame.draw.rect(win, (255, 0, 0), (x + 30 * i, y, width, height[i]))

# 无限循环
while run:

	# execute标志开始排序
	execute = False

	# 延时
	pygame.time.delay(10)

	# 获取按下的键
	keys = pygame.key.get_pressed()

	# 迭代事件
	for event in pygame.event.get():

		# quit事件
		if event.type == pygame.QUIT:

			# 设置 run = false 结束循环
			run = False

	# 如果空格键被按下
	if keys[pygame.K_SPACE]:
		# 设置开始排序标志
		execute = True

	# 检查排序表示
	if execute == False:

		# 将背景设为黑色
		win.fill((0, 0, 0))

		# 传递height参数,绘制各个条形图
		show(height)

		# 更新屏幕
		pygame.display.update()

	# 如果execute表示是True
	else:

		# 使用冒泡排序方法排序
		for i in range(len(height) - 1):

			# 下面的排序完成后,参与排序的最大值将放在列表的最后
			for j in range(len(height) - i - 1):

				# 开始的元素大于下一个元素
				if height[j] > height[j + 1]:

					# 将两个元素交换
					t = height[j]
					height[j] = height[j + 1]
					height[j + 1] = t

				win.fill((0, 0, 0))

				# 传递height参数,绘制各个条形图
				show(height)

				# 延时
				pygame.time.delay(50)

				# 更新屏幕
				pygame.display.update()

# 退出程序
pygame.quit()

输出 :

在这里插入图片描述

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐