冒泡排序python可视化程序并给出注释
时间: 2023-07-10 20:15:01 浏览: 95
bubble_select_sort.zip
下面是冒泡排序的Python可视化程序和注释:
```python
import pygame
import random
# 初始化Pygame
pygame.init()
# 设置窗口的宽度和高度
WIDTH = 800
HEIGHT = 600
# 设置颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# 创建窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# 设置窗口标题
pygame.display.set_caption("Bubble Sort Visualization")
# 设置字体
font = pygame.font.SysFont(None, 30)
# 生成随机数列
arr = [random.randint(1, HEIGHT) for i in range(WIDTH // 2)]
# 设置每个矩形的宽度
bar_width = (WIDTH // len(arr)) - 1
# 标记是否排序完成
sorted = False
# 循环
while not sorted:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sorted = True
# 重绘背景
screen.fill(BLACK)
# 冒泡排序
for i in range(len(arr)):
# 标记是否有交换
swapped = False
for j in range(len(arr) - i - 1):
# 如果前一个元素比后一个元素大,交换它们的位置
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
# 绘制矩形
rect = pygame.Rect(j * (bar_width + 1), HEIGHT - arr[j], bar_width, arr[j])
pygame.draw.rect(screen, BLUE, rect)
# 绘制矩形
rect = pygame.Rect((j + 1) * (bar_width + 1), HEIGHT - arr[j + 1], bar_width, arr[j + 1])
pygame.draw.rect(screen, RED, rect)
# 更新屏幕
pygame.display.flip()
# 等待一段时间
pygame.time.wait(10)
# 如果没有交换,说明已经排好序了
if not swapped:
sorted = True
break
# 绘制矩形
for i in range(len(arr)):
rect = pygame.Rect(i * (bar_width + 1), HEIGHT - arr[i], bar_width, arr[i])
pygame.draw.rect(screen, GREEN, rect)
# 更新屏幕
pygame.display.flip()
# 等待一段时间
pygame.time.wait(1000)
# 退出Pygame
pygame.quit()
```
注释:
1. 导入必要的模块和库
2. 初始化Pygame
3. 设置窗口的宽度和高度
4. 设置颜色
5. 创建窗口
6. 设置窗口标题
7. 设置字体
8. 生成随机数列
9. 设置每个矩形的宽度
10. 标记是否排序完成
11. 开始循环
12. 处理事件
13. 重绘背景
14. 冒泡排序
15. 标记是否有交换
16. 如果前一个元素比后一个元素大,交换它们的位置
17. 绘制矩形
18. 绘制矩形
19. 更新屏幕
20. 等待一段时间
21. 如果没有交换,说明已经排好序了
22. 绘制矩形
23. 更新屏幕
24. 等待一段时间
25. 退出Pygame
阅读全文