Monday, June 25, 2018

Sorting :- Selection Sort, Bubbble Sort, Insertion Sort, Quick Sort, Shell Sort, Merge Sort, Heap Sort - DS (C Program)

#include<stdio.h>
#include<conio.h>

void normal_sort(int []);
void selection_sort(int []);
void bubble_sort(int []);
void insertion_sort(int []);
void quick_sort(int [],int,int);
void shell_sort(int []);
void merge_sort(int [],int,int);
void merge(int [],int,int,int);
void heap_sort(int [],int,int);
void create_heap(int [],int);
void main()
{
int a[10],n=0,i=0;
clrscr();
while(1)
{
printf("Enter your choice\n");
printf("1 for normal sort\n");
printf("2 for selection sort\n");
printf("3 for bubble sort\n");
printf("4 for insertion sort\n");
printf("5 for quick sort\n");
printf("6 for shell sort\n");
printf("7 for merge sort\n");
printf("8 for heap sort\n");
printf("9 for exit\n");
scanf("%d",&n);
if(n==9)
{
break;
}
printf("Enter 10 numbers\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
switch(n)
{
case 1:
{
    normal_sort(a);
    break;
}
case 2:
{
    selection_sort(a);
    break;
}
case 3:
{
    bubble_sort(a);
    break;
}
case 4:
{
    insertion_sort(a);
    break;
}
case 5:
{
    quick_sort(a,0,9);
    printf("Quick sort\n");
    for(i=0;i<10;i++)
    {
printf("%d ",a[i]);
    }
    break;
}
case 6:
{
    shell_sort(a);
    break;
}
case 7:
{
merge_sort(a,0,9);
printf("Merge sort\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
case 8:
{
heap_sort(a,1,10);
printf("Heap sort\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
default:
{
break;
}
}
}
getch();
}
void normal_sort(int a[10])
{
int i=0,j=0,temp=0;
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
     if(a[i]>a[j])
     {
temp=a[i];
a[i]=a[j];
a[j]=temp;
     }
}
}
printf("Normal sort\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void selection_sort(int a[10])
{
int i=0,j=0,k=0,mini=0,temp=0;
for(i=0;i<10;i++)
{
mini=i;
for(j=i+1;j<10;j++)
{
if(a[j]<a[mini])
{
    mini=j;
}
}
if(mini!=i)
{
temp=a[i];
a[i]=a[mini];
a[mini]=temp;
}
for(k=0;k<10;k++)
{
printf("%d ",a[k]);
}
printf("\n");
}
printf("Selection sort\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void bubble_sort(int a[10])
{
int i=0,j=0,n=10,temp=0,swap=0;
for(i=0;i<10;i++)
{
swap=0;
for(j=0;j<n-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
swap++;
}

}
if(swap==0)
{
  goto abc;
}
else
{
n--;
}
    
   }
   abc:
printf("Bubble sort\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void insertion_sort(int a[10])
{
int i=0,j=0,temp=0,k=0;
for(i=0;i<10;i++)
{
temp=a[i];
j=i-1;
while(j>=0 && temp<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
for(k=0;k<10;k++)
{
printf("%d ",a[k]);
}
printf("\n");
}
printf("Insertion sort\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void quick_sort(int a[],int LB,int UB)
{
       int i=LB,j=UB,temp=0;
       int pivot=a[LB];
       if(UB-LB<=0)
       {
return;
       }
       while(1)
       {
       i++;
       while(a[i]<=pivot && i<UB)
       i++;
       while(a[j]>pivot && j>LB)
       j--;
       if(i<j)
       {
temp=a[i];
a[i]=a[j];
a[j]=temp;
       }
       else
       {
temp=a[LB];
a[LB]=a[j];
a[j]=temp;
break;
       }
       }
       for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
       quick_sort(a,LB,j-1);
       quick_sort(a,j+1,UB);
}
void shell_sort(int a[])
{
int n=10,gap=0,i=0,j=0,k=0,temp=0;
gap=(n/2)+1;
for(i=gap;i>=1;i--)
{
for(j=0;j<n-gap;j++)
{
if(a[j]>a[j+i])
{
temp=a[j];
a[j]=a[j+i];
a[j+i]=temp;
}
}
       gap--;
       for(k=0;k<10;k++)
{
printf("%d ",a[k]);
}
printf("\n");
}
printf("Shell sort\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void merge_sort(int a[10],int start,int finish)
{
int size=0,mid=0;
size=finish-start+1;
if(size<=1)
return;
mid=start+(size/2)-1;
merge_sort(a,start,mid);
merge_sort(a,mid+1,finish);
merge(a,start,mid+1,finish);
}
void merge(int a[10],int f,int s,int t)
{
int i=0,j=0,temp[10],l=0;
i=f;
j=s;
while(i<s && j<=t)
{
if(a[i]<=a[j])
   temp[++l]=a[i++];
else
    temp[++l]=a[j++];
}
if(i>=s)
{
while(j<=t)
{
temp[++l]=a[j++];
}
}
else
{
while(i<s)
{
temp[++l]=a[i++];
}
}
for(i=1;i<=l;i++)
{
    a[f-1+i]=temp[i];
}
}
void heap_sort(int a[],int i,int size)
{
int temp,j;
temp=a[i];
j=i*2;
while(j<=size)
{
if(j<size && a[j]<a[j+1])
j++;
if(a[j]<a[j/2])
break;
a[j/2]=a[j];
j=j*2;
}
a[j/2]=temp;
}
void create_heap(int a[],int i)
{
int temp=0;
temp=a[i];
while(i>1 && a[i/2]<temp)
{
a[i]=a[i/2];
i=i/2;
}
a[i]=temp;
}

No comments:

Post a Comment