#include< stdio.h >
#include< stdlib.h >
#include< string.h >
char* ADeleteS(char AiHeapS[][10],int *AiSizeS,char*);
int main()
{
int AiChS;
do
{
printf("\nMenu \n 1 : Heap sort\n 2 : Merge sort\n 3 : Quick sort\n 4 : Exit\nEnter your choice : ");
scanf("%d",&AiChS);
switch(AiChS)
{
case 1: AHeapS();
break;
case 2: AMergES();
break;
case 3: AQuickS();
break;
}
}while(AiChS!=4);
}
int AHeapS() // FUNCTION TO IMPLEMENT HEAP SORT
{
int AiIndexS,AiSizeS,AiTempS;
char AiHeapS[10][10],AcTempS[10];
printf("\nEnter size : ");
scanf("%d",&AiSizeS);
AiTempS=AiSizeS;
printf("\nEnter names : ");
for(AiIndexS=0;AiIndexS
AiIndexS=AiSizeS/2;
while(AiIndexS--)
AHeapifyS(AiHeapS,AiSizeS,AiIndexS);
while(AiTempS)
{ ADeleteS(AiHeapS,&AiTempS,AcTempS);strcpy(AiHeapS[AiTempS],AcTempS);}
printf("\nSorted list is : ");
for(AiIndexS=0;AiIndexS
}
int AHeapifyS(char AiHeapS[][10],int AiSizeS,int AiIndexS) // FUNCTION TO IMPLEMENT HEAPIFY
{
int lc=2*AiIndexS+1,rc=lc+1,m=AiIndexS;char t[10];
while(lc
if(strcmp(AiHeapS[AiIndexS],AiHeapS[lc])<0) m=lc;
else m=AiIndexS;
if(rc
if(AiIndexS!=m)
{
strcpy(t,AiHeapS[AiIndexS]);
strcpy(AiHeapS[AiIndexS],AiHeapS[m]);
strcpy(AiHeapS[m],t);
}
else
return;
AiIndexS=m;
lc=2*AiIndexS+1;
rc=lc+1;
}
}
char* ADeleteS(char AiHeapS[][10],int *AiSizeS,char *AcTempS) // FUNCTION TO IMPLEMENT DELETE ROOT ITEM
{
char AiElmntS[10];
strcpy(AcTempS,AiHeapS[0]);
strcpy(AiHeapS[0],AiHeapS[*AiSizeS-1]);
(*AiSizeS)--;
AHeapifyS(AiHeapS,*AiSizeS,0);
}
int AMergES() // FUNCTION TO IMPLEMENT MERGE SORT
{
int AissS=1,AiIndexS,AiSizeS;char AiAS[10][15],AiBS[10][15];
AiSizeS=AReadNamesS(AiAS);
while(AissS
AMergePassS(AiAS,AiBS,AissS,AiSizeS);
AissS+=AissS;
AMergePassS(AiBS,AiAS,AissS,AiSizeS);
AissS+=AissS;
}
printf("\nSorted elements are : ");
for(AiIndexS=0;AiIndexS
printf("\n");
}
int AReadNamesS(char AiAS[][15]) // FUNCTION TO IMPLEMENT READ NAMES FROM FILE
{
char AcFileS[15];
int AiIndexS;
FILE *fp;
printf("\nEnter file name : ");
scanf("%s",AcFileS);
fp=fopen(AcFileS,"r");
if(fp==NULL)
{
printf("\nInvalid file name \n");
AReadNamesS(AiAS);
}
for(AiIndexS=0;fscanf(fp,"%s",AiAS[AiIndexS])!=EOF;AiIndexS++);
return AiIndexS;
}
int AMergePassS(char AaS[][15],char AbS[][15],int AssS,int AnS) // FUNCTION TO IMPLEMENT MERGE PASS
{
int AiS=0,AkS=2*AssS,AnsS=AnS-AkS;
while(AiS<=AnsS)
{
AMergeS(AaS,AbS,AiS,AiS+AssS-1,AiS+AkS-1);
AiS+=AkS;
}
if(AiS+AssS
else
for(AkS=AiS;AkS
int AMergeS(char AaS[][15],char AbS[][15],int AsfS,int AefS,int AesS) // FUNCTION TO IMPLEMENT MERGE
{
int AfS=AsfS,AsS=AefS+1,AkS=AsfS,AeS;
while(AfS<=AefS&&AsS<=AesS)
if(strcmp(AaS[AfS],AaS[AsS])<=0) strcpy(AbS[AkS++],AaS[AfS++]);
else strcpy(AbS[AkS++],AaS[AsS++]);
if(AfS>AefS) AfS=AsS,AsS=AesS;
else AeS=AefS;
for(;AfS<=AsS;AfS++)
strcpy(AbS[AkS++],AaS[AfS]);
}
int AQuickS() // FUNCTION TO IMPLEMENT QUICK SORT
{
int AiIndexS,AiSizeS;char AiQuickS[10][15];
printf("\n Quick Sort\n----------------\nEnter size : ");
scanf("%d",&AiSizeS);
printf("\nEnter elements : ");
for(AiIndexS=0;AiIndexS
strcpy(AiQuickS[AiSizeS],"zzzzzzzzzzz");
AQuickSortS(AiQuickS,0,AiSizeS);
printf("\nSorted list is : ");
for(AiIndexS=0;AiIndexS
}
int AQuickSortS(char AaS[][15],int AfS,int AlS) // FUNCTION TO FIND PIVOT AND ACTUAL POSITION AND INTERCHANGE
{
int AiS=AfS,AjS=AlS+1;char ApS[15],AxS[15];strcpy(ApS,AaS[AfS]);
if(AfS<=AlS)
{
for(;;)
{
while(strcmp(AaS[++AiS],ApS)<0);
while(strcmp(AaS[--AjS],ApS)>0);
if(AiS
strcpy(AxS,AaS[AiS]);strcpy(AaS[AiS],AaS[AjS]);strcpy(AaS[AjS],AxS);}
else
break;
}
strcpy(AaS[AfS],AaS[AjS]);strcpy(AaS[AjS],ApS);
AQuickSortS(AaS,AfS,AjS-1);
AQuickSortS(AaS,AjS+1,AlS);
}
}
No comments:
Post a Comment