The human brain can easily process visuals instead of long codes to understand the algorithms. In this article, a program that program visualizes the Merge sort Algorithm has been implemented.
The GUI(Graphical User Interface) is implemented using pygame package in python.
Approach:
Examples:
Input :
Press “Enter” key to Perform Visualization.
Press “r” key to generate new array.
Output :
Initial:
Below is the program to visualize the Merge Sort algorithm:
# Python implementation for visualizing merge sort. import pygame import random pygame.font.init() # Total window screen = pygame.display.set_mode(( 900 , 650 )) # Title and Icon pygame.display.set_caption( "SORTING VISUALISER" ) # Place any custom png file in same folder as the source code # and mention it below and uncomment below two lines. # img = pygame.image.load # ('E:/Projects / Sorting Visualiser / sorticon.png') # pygame.display.set_icon(img) # Boolean variable to run the program in while loop run = True # Window size 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 ) # Generate new Array def generate_arr(): for i in range ( 1 , 151 ): arr_clr[i] = clr[ 0 ] array[i] = random.randrange( 1 , 100 ) generate_arr() def refill(): screen.fill(( 255 , 255 , 255 )) draw() pygame.display.update() pygame.time.delay( 20 ) # Sorting Algo:Merge sort def mergesort(array, l, r): mid = (l + r) / / 2 if l<r: mergesort(array, l, mid) mergesort(array, mid + 1 , r) merge(array, l, mid, mid + 1 , r) def merge(array, x1, y1, x2, y2): i = x1 j = x2 temp = [] pygame.event.pump() while i< = y1 and j< = y2: arr_clr[i] = clr[ 1 ] arr_clr[j] = clr[ 1 ] refill() arr_clr[i] = clr[ 0 ] arr_clr[j] = clr[ 0 ] if array[i]<array[j]: temp.append(array[i]) i + = 1 else : temp.append(array[j]) j + = 1 while i< = y1: arr_clr[i] = clr[ 1 ] refill() arr_clr[i] = clr[ 0 ] temp.append(array[i]) i + = 1 while j< = y2: arr_clr[j] = clr[ 1 ] refill() arr_clr[j] = clr[ 0 ] temp.append(array[j]) j + = 1 j = 0 for i in range (x1, y2 + 1 ): pygame.event.pump() array[i] = temp[j] j + = 1 arr_clr[i] = clr[ 2 ] refill() if y2 - x1 = = len (array) - 2 : arr_clr[i] = clr[ 3 ] else : arr_clr[i] = clr[ 0 ] # Draw the array values def draw(): # Text should be rendered txt = fnt.render( "PRESS" \ " 'ENTER' TO PERFORM SORTING." , 1 , ( 0 , 0 , 0 )) # Position where text is placed screen.blit(txt, ( 20 , 20 )) txt1 = fnt.render( "PRESS 'R' FOR NEW ARRAY." , 1 , ( 0 , 0 , 0 )) screen.blit(txt1, ( 20 , 40 )) txt2 = fnt1.render( "ALGORITHM USED: " \ "MERGE SORT" , 1 , ( 0 , 0 , 0 )) screen.blit(txt2, ( 600 , 60 )) element_width = (width - 150 ) / / 150 boundry_arr = 900 / 150 boundry_grp = 550 / 100 pygame.draw.line(screen, ( 0 , 0 , 0 ), ( 0 , 95 ), ( 900 , 95 ), 6 ) for i in range ( 1 , 100 ): pygame.draw.line(screen, ( 224 , 224 , 224 ), ( 0 , boundry_grp * i + 100 ), ( 900 , boundry_grp * i + 100 ), 1 ) # Drawing the array values as lines for i in range ( 1 , 151 ): pygame.draw.line(screen, arr_clr[i],\ (boundry_arr * i - 3 , 100 ),\ (boundry_arr * i - 3 , array[i] * boundry_grp + 100 ),\ element_width) # Infinite loop to keep the window open while run: # background screen.fill(( 255 , 255 , 255 )) # Event handler stores all event for event in pygame.event.get(): # If we click Close button in window if event. type = = pygame.QUIT: run = False if event. type = = pygame.KEYDOWN: if event.key = = pygame.K_r: generate_arr() if event.key = = pygame.K_RETURN: mergesort(array, 1 , len (array) - 1 ) draw() pygame.display.update() pygame.quit() |
Output: