📜  排序算法可视化:插入排序

📅  最后修改于: 2021-10-23 07:43:01             🧑  作者: Mango

通过可视化可以很容易地理解像插入排序这样的算法。在本文中,实现了一个可视化插入排序算法的程序。
图形用户界面 (GUI) 是使用 pygame 库在Python实现的。
方法:

  • 生成随机数组并用条形填充 pygame 窗口。条是垂直的直线,代表数组元素。
  • 将所有条形设置为绿色(未排序)。
  • 使用pygame.time.delay()来减慢算法的速度,以便我们可以看到排序过程。
  • 实现一个计时器来查看算法的执行情况。
  • 这些操作使用“pygame.event.get()”方法执行,该方法存储用户执行的所有事件,例如启动、重置。
  • 蓝色用于突出显示特定时间排序中涉及的条。
  • 橙色突出显示排序的条。

观察:
我们可以从插入排序的可视化中清楚地看到,与其他排序算法(如合并排序或快速排序)相比,插入排序非常慢。
例子:

请确保在运行以下程序之前安装 pygame 库。
以下是上述可视化工具的实现:

Python
# Python implementation of the
# Sorting visualiser: Insertion Sort
 
# Imports
import pygame
import random
import time
pygame.font.init()
startTime = time.time()
# Total window
screen = pygame.display.set_mode(
                        (900, 650)
                    )
 
# Title and Icon
pygame.display.set_caption(
            "SORTING VISUALISER"
            )
 
# Uncomment below lines for setting
# up the icon for the visuliser
# img = pygame.image.load('sorticon.png')
# pygame.display.set_icon(img)
 
# Boolean variable to run
# the program in while loop
run = True
 
# Window size and some initials
width = 900
length = 600
array =[0]*151
arr_clr =[(0, 204, 102)]*151
clr_ind = 0
clr =[(0, 204, 102), (255, 0, 0), \
       (0, 0, 153), (255, 102, 0)]
fnt = pygame.font.SysFont("comicsans", 30)
fnt1 = pygame.font.SysFont("comicsans", 20)
 
# Function to generate new Array
def generate_arr():
    for i in range(1, 151):
        arr_clr[i]= clr[0]
        array[i]= random.randrange(1, 100)
 
# Initially generate a array
generate_arr()
 
# Function to refill the
# updates on the window
def refill():
    screen.fill((255, 255, 255))
    draw()
    pygame.display.update()
    pygame.time.delay(10)
 
# Sorting Algorithm: Insertion sort
def insertionSort(array):
 
    for i in range(1, len(array)):
        pygame.event.pump()
        refill()
        key = array[i]
        arr_clr[i]= clr[2]
        j = i-1
        while j>= 0 and key


输出:

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程