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

📅  最后修改于: 2022-05-13 01:54:52.172000             🧑  作者: Mango

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

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

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

下面是实现

# 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()

输出 :