像插入排序这样的算法可以通过可视化轻松理解。在本文中,实现了一个可视化插入排序算法的程序。
图形用户界面(GUI)使用pygame库在Python实现。
方法:
- 生成随机数组,并用条形填充pygame窗口。竖条是垂直的直线,代表数组元素。
- 将所有条形设置为绿色(未排序)。
- 使用pygame.time.delay()减慢算法速度,以便我们可以看到排序过程。
- 实现计时器以查看算法如何执行。
- 使用“ pygame.event.get()”方法执行操作,该方法存储用户执行的所有事件,例如启动,重置。
- 蓝色用于突出显示在特定时间进行排序的条形图。
- 橙色突出显示已排序的条。
观察结果:
从插入排序可视化中我们可以清楚地看到,与其他排序算法(例如Mergesort或Quicksort)相比,插入排序非常慢。
例子:
Input:
Press “Enter” key to Perform Visualization.
Press “R” key to generate new array.
Output:
Initial:
Sorting:
Final:
在运行以下程序之前,请确保安装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
输出: