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