使用 PyGame 的冒泡排序可视化工具
在本文中,我们将看到如何使用 PyGame 可视化冒泡排序算法,即当 pygame 应用程序启动时,我们可以看到具有不同高度的未排序条,当我们单击空格键时,它开始以冒泡排序方式排列,即在每次迭代最大值元素应该最后出现。
冒泡排序是一种简单的算法,用于对一组给定的 n 个元素进行排序,这些元素以具有 n 个元素的数组的形式提供。冒泡排序将所有元素一一比较,并根据它们的值对它们进行排序。
Implementation steps :
1. Create a main window
2. Fill the main window with black color
3. Create a method to show the list of bar with specific gap in between them
4. Get the keys input from the user
5. If space bar is pressed start the sorting process
6. Implement bubble sort algorithm on the list
7. After every internal iteration fill the screen with black color and call the show method to show the iterated list in the form of bar.
下面是实现
# importing pygame
import pygame
pygame.init()
# setting window size
win = pygame.display.set_mode((500, 400))
# setting title to the window
pygame.display.set_caption("Bubble sort")
# initial position
x = 40
y = 40
# width of each bar
width = 20
# height of each bar (data to be sorted)
height = [200, 50, 130, 90, 250, 61, 110,
88, 33, 80, 70, 159, 180, 20]
run = True
# method to show the list of height
def show(height):
# loop to iterate each item of list
for i in range(len(height)):
# drawing each bar with respective gap
pygame.draw.rect(win, (255, 0, 0), (x + 30 * i, y, width, height[i]))
# infinite loop
while run:
# execute flag to start sorting
execute = False
# time delay
pygame.time.delay(10)
# getting keys pressed
keys = pygame.key.get_pressed()
# iterating events
for event in pygame.event.get():
# if event is to quit
if event.type == pygame.QUIT:
# making run = false so break the while loop
run = False
# if space bar is pressed
if keys[pygame.K_SPACE]:
# make execute flag to true
execute = True
# checking if execute flag is false
if execute == False:
# fill the window with black color
win.fill((0, 0, 0))
# call the height method to show the list items
show(height)
# update the window
pygame.display.update()
# if execute flag is true
else:
# start sorting using bubble sort technique
for i in range(len(height) - 1):
# after this iteration max element will come at last
for j in range(len(height) - i - 1):
# starting is greater then next element
if height[j] > height[j + 1]:
# save it in temporary variable
# and swap them using temporary variable
t = height[j]
height[j] = height[j + 1]
height[j + 1] = t
# fill the window with black color
win.fill((0, 0, 0))
# call show method to display the list items
show(height)
# create a time delay
pygame.time.delay(50)
# update the display
pygame.display.update()
# exiting the main window
pygame.quit()
输出 :