Saturday, 8 December 2012

Merge Sort using Recursion in C


#include<stdio.h>
int merge(int *,int,int,int);
int merge_sort(int *,int,int);
int main()
{
int a[1000],n,i,p,r;
clrscr();
printf("Enter the length of array:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
merge_sort(a,0,n-1);
for(i=0;i<n;i++)
printf(" %d ",a[i]);
getch();
return 0;
}
int merge_sort(int *a,int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
merge(a,p,q,r);
}
return 0;
}
int merge(int *a,int p,int q,int r)
{
int n1,n2,i,j,k,L[500],R[500];
n1=q-p+1;
n2=r-q;
for(i=0;i<n1;i++)
L[i]=a[p+i];
for(j=0;j<n2;j++)
R[j]=a[q+j+1];
L[n1]=32765;
R[n2]=32765;
i=0;j=0;
for(k=p;k<=r;k++)
{
if(L[i]<=R[j])
{
a[k]=L[i];
i=i+1;
}
else
{
a[k]=R[j];
j=j+1;
}
}
return 0;
}

Quick sort using recursion in C


#include<stdio.h>
quicksort(int *,int,int);
partition(int *,int,int);
int main()
{
int a[100],p,r,i=0,n;
clrscr();
printf("Enter the length of array: ");
scanf("%d",&n);
printf("Enter the elements of array: \n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(a,0,n-1);
printf("The sorted sequence is: \n");
for(i=0;i<n;i++)
printf(" %d ",a[i]);
getch();
return 0;
}

quicksort(int *a,int p,int r)
{
int q;
if(p<r)
{
q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
return 0;
}


int partition(int *a,int p,int r)
{
int x,i,j,temp;
x=a[r];
i=p-1;
for(j=p;j<r;j++)
{
if(a[j]<=x)
{
i=i+1;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[i+1];
a[i+1]=a[r];
a[r]=temp;
return i+1;
}