Programming with Passion

Make the best out of everything.

Tuesday 25 June 2019

Merge Sort Visualisation

Merge Sort Visualisation in C



In this program 100 random numbers are generated which are represented on x-y graph using lines
and merge sort is applied on the array, as elements changes their position the graph is redrawn and the visualisation can be seen. Also current position of index is shown by red lines.

Below is the code written in C language.
Compiler used - GCC

Do Follow me on instagram at https://www.instagram.com/dev_it_rish/



#include<stdio.h>
#include<graphics.h>
#include<time.h> 
int maxy=480;
void merge(int arr[], int l, int m, int r) 
    int i, j, k; 
    int n1 = m - l + 1; 
    int n2 =  r - m; 
  
    /* create temp arrays */
    int L[n1], R[n2]; 
  
    /* Copy data to temp arrays L[] and R[] */
    for (i = 0; i < n1; i++) 
        L[i] = arr[l + i]; 
    for (j = 0; j < n2; j++) 
        R[j] = arr[m + 1+ j]; 
  
    /* Merge the temp arrays back into arr[l..r]*/
    i = 0; // Initial index of first subarray 
    j = 0; // Initial index of second subarray 
    k = l; // Initial index of merged subarray 
    while (i < n1 && j < n2) 
    { 
        if (L[i] <= R[j]) 
        { 
            arr[k] = L[i]; 
            i++; 
        } 
        else
        { 
            arr[k] = R[j]; 
            j++; 
        } 
        k++;
delay(8);
cleardevice();
for(int z=0;z<100;z++)
{
if(z==i || z==j || z==k)
setcolor(RED);
line((4*z)+120,maxy-arr[z],(4*z)+120,maxy);
if(z==i || z==j  || z==k)
setcolor(WHITE);
    } 
  
    /* Copy the remaining elements of L[], if there 
       are any */
    while (i < n1) 
    { 
        arr[k] = L[i]; 
        i++; 
        k++; 
delay(8);
cleardevice();
for(int z=0;z<100;z++)
{
if(z==i || z==j  || z==k)
setcolor(RED);
line((4*z)+120,maxy-arr[z],(4*z)+120,maxy);
if(z==i || z==j  || z==k)
setcolor(WHITE);
    } 
  
    /* Copy the remaining elements of R[], if there 
       are any */
    while (j < n2) 
    { 
        arr[k] = R[j]; 
        j++; 
        k++; 
delay(8);
cleardevice();
for(int z=0;z<100;z++)
{
if(z==i || z==j  || z==k)
setcolor(RED);
line((4*z)+120,maxy-arr[z],(4*z)+120,maxy);
if(z==i || z==j  || z==k)
setcolor(WHITE);
    } 
  
/* l is for left index and r is right index of the 
   sub-array of arr to be sorted */
void mergeSort(int arr[], int l, int r) 
    if (l < r) 
    { 
        // Same as (l+r)/2, but avoids overflow for 
        // large l and h 
        int m = l+(r-l)/2; 
  
        // Sort first and second halves 
        mergeSort(arr, l, m); 
        mergeSort(arr, m+1, r); 
  
        merge(arr, l, m, r); 
    } 


int main()
{
int gd=DETECT,gm;
srand(time(0)); 
int temp,n,i,k,j,arr[100];
for(i=0;i<100;i++)
arr[i] = rand()%480;
initgraph(&gd,&gm,NULL);
mergeSort(arr, 0, 99);
scanf("%d",&n);
closegraph();
}

Do Follow me on instagram at https://www.instagram.com/dev_it_rish/



No comments:

Post a Comment