Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

#include<stdio.

h>
#include<stdlib.h>
int a[5],n=5,b[5],o[5],c[20];
void accept(int a[5],int n)//enter 5 elements
{
int i;

for(i=0;i<n;i++)
{
printf("\n Enter element:: ");
scanf("%d",&a[i]);
}
}

void display(int a[5],int n)//displaying 5 elements


{
int i;
for(i=0;i<n;i++)
{
printf("\n The element is :: %d",a[i]);
}
}

void merge(int a[5],int b[5],int low,int mid,int high,int n)


{
int i,j,k;
i=low;
j=mid+1;
k=0;

while((i<=mid)&&(j<=high))
{
if(a[i]<=a[j])
{
b[k]=a[i];
k=k+1;
i=i+1;
}
else
{
b[k]=a[j];
k=k+1;
j=j+1;

}
}

while(i<=mid)
{
b[k]=a[i];
k=k+1;
i=i+1;
}
while(j<=high)
{
b[k]=a[j];
k=k+1;
j=j+1;
}

j=low;

k=0;

while(j<=high)
{
a[j]=b[k];
j=j+1;
k=k+1;
}

printf("\n*************After merge********");
display(a,n);
printf("\n*********************************");
}

/*
void swap(int *x,int *y)
{
int temp;

temp=*x;
*x=*y;
*y=temp;
}

*/
int partition(int a[5],int n,int low,int high)
{
int down,temp,up,pivot;

printf("\n Inside partition:: ");

up=high;

down=low+1;

pivot=a[low];
do
{

while((a[down]<pivot)&&(down<=high))
{
down++;
}

while((a[up]>pivot)&&(up>low))
{
up--;
}
if(down<up)
{

temp=a[down];
a[down]=a[up];
a[up]=temp;

}
}while(down<up);
a[low]=a[up];
a[up]=pivot;

return up;
}

/*Merge sort function start */


void mergesort(int a[5],int b[5],int low,int high,int n)
{
int mid;

if(low<high)
{
mid=(low+high)/2;
mergesort(a,b,low,mid,n);
mergesort(a,b,mid+1,high,n);
merge(a,b,low,mid,high,n);
}
printf("\n **************");
display(a,n);
printf("\n **************");
}
/*end of mergesort function*/
/*start of quickroot function*/
void quicksort(int a[5],int n,int low,int high)
{
int j;
printf("\n Inside quicksort:: ");

if(low<high)
{
j=partition(a,n,low,high);
printf("\n j=%d",j);
quicksort(a,n,low,j-1);
quicksort(a,n,j+1,high);

printf("\n***************");
display(a,n);
printf("\n***************");
}
}
/*end of quicksort function*/

/*start of counting_sort*/
void counting_sort(int a[5],int n)
{
int i,count=0,store,max,x,k,j,m=0;

max=a[0];

for(i=1;i<=n;i++)//step 1 of algorithm to find max


{
if(a[i]>max)
{
max=a[i];
}
}
printf("\n Max element is %d",max);

for(i=0;i<=max;i++)//step 2 initialization of array c


{
c[i]=0;

for(i=0;i<n;i++)
{
c[a[i]]=c[a[i]]+1;
}
printf("\n displaying c array:: ");

for(m=0;m<=max;m++)
printf("\n The element is :: %d",c[m]);

/* step no 4*/
for(i=1;i<=max;i++)
{
c[i]=c[i]+c[i-1];
}
printf("\n Array after cumulative addition is ::");
display(c,n);
/*end of step 4*/

/*step no 5:: */

for(i=n-1;i>=0;i--)
{
o[c[a[i]]]=a[i];
c[a[i]]=c[a[i]]-1;
}
printf("\n output array is :: ");

for(i=1;i<=n;i++)
printf("\n %d",o[i]);
}
/* end of counting_sort function*/

/*start of main function*/


void main()
{
int ch,low=0,high=0;
high=n-1;
do
{

printf("\n******MENU******");
printf("\n 1.Mergesort");
printf("\n 2.Quickroot");
printf("\n 3.Counting sort");
printf("\n 4.Exit");
printf("\n Enter choice:: ");
scanf("%d",&ch);

switch(ch)
{
case 1://first case mergesort
accept(a,n);
display(a,n);
low=0;
high=n-1;
mergesort(a,b,low,high,n);
break;

case 2://second case quicksort function


accept(a,n);
display(a,n);
low=0;
high=n-1;
quicksort(a,n,low,high);
break;

case 3://third counting sort function


accept(a,n);
display(a,n);
counting_sort(a,n);
break;

case 4:exit(0);
}
}while(ch!=4);

You might also like