Design and Analysis of Algorithms - 6
Implement program for randomized version of quick sort and compare its performance with normal version of quick sort using steps count on various number of inputs.
Code:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int count=0;
int r_count=0;
void quick_sort(int a[],int start,int
n)
{
int i,j,pivot,temp;
count++;
if(start<n)
{
count++;
pivot=start;
count++;
i=start;
count++;
j=n;
count++;
while(i<j)
{
count++;
while(a[i]<=a[pivot] &&
i<n)
{
count++;
i++;
count++;
}
while(a[j]>a[pivot])
{
count++;
j--;
count++;
}
if(i<j)
{
count++;
temp=a[i];
count++;
a[i]=a[j];
count++;
a[j]=temp;
count++;
}
}
temp=a[pivot];
count++;
a[pivot]=a[j];
count++;
a[j]=temp;
count++;
quick_sort(a,start,j-1);
count++;
quick_sort(a,j+1,n);
count++;
}
}
void sorting_time(int a[],int
start,int n)
{
int i,j,pivot,temp;
if(start<n)
{
pivot=start;
i=start;
j=n;
while(i<j)
{
while(a[i]<=a[pivot]
&& i<n)
{
i++;
}
while(a[j]>a[pivot])
{
j--;
}
if(i<j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[pivot];
a[pivot]=a[j];
a[j]=temp;
sorting_time(a,start,j-1);
sorting_time(a,j+1,n);
}
}
void quick_sort_rand(int a[],int
start,int n)
{
int i,j,temp,pivot;
r_count++;
if(start<n)
{
r_count++;
pivot=pivot=start+
rand()%(n-start+1);
r_count++;
i=start;
r_count++;
j=n;
r_count++;
while(i<j)
{
r_count++;
while(a[i]<=a[pivot]
&& i<n)
{
r_count++;
i++;
r_count++;
}
while(a[j]>a[pivot])
{
r_count++;
j--;
r_count++;
}
if(i<j)
{
r_count++;
temp=a[i];
r_count++;
a[i]=a[j];
r_count++;
a[j]=temp;
r_count++;
}
}
temp=a[pivot];
r_count++;
a[pivot]=a[j];
r_count++;
a[j]=temp;
r_count++;
quick_sort(a,start,j-1);
r_count++;
quick_sort(a,j+1,n);
r_count++;
}
}
void rand_sorting_time(int a[],int
start,int n)
{
int i,j,pivot,temp;
if(start<n)
{
pivot=pivot=start+
rand()%(n-start+1);
i=start;
j=n;
while(i<j)
{
while(a[i]<=a[pivot] &&
i<n)
{
i++;
}
while(a[j]>a[pivot])
{
j--;
}
if(i<j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[pivot];
a[pivot]=a[j];
a[j]=temp;
sorting_time(a,start,j-1);
sorting_time(a,j+1,n);
}
}
int main ()
{
int i;
time_t t;
clock_t start,end;
double time_taken,r_time_taken;
int n;
srand((unsigned)time(&t));
printf("Enter size of array: ");
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
a[i]=rand()%10000;printf("\nFor Random Array \nArray size:
%d",n);
quick_sort(a,0,n);
printf("\nTotal steps of Quick sort: %d",count);
count=0;
for(i=0;i<n;i++)
{
a[i]=rand()%100000;
}
quick_sort_rand(a,0,n);
printf("\nTotal steps of Randomized Quick sort: %d",r_count);
r_count=0;
for(i=0;i<n;i++)
{
a[i]=rand()%100000;
}
start=clock();
sorting_time(a,0,n);
end=clock();
time_taken=((double)(end-start))/CLOCKS_PER_SEC;
printf("\nTime with Quick sort: %f",time_taken);
for(i=0;i<n;i++)
{
a[i]=rand()%100000;
}
start=clock();
rand_sorting_time(a,0,n);
end=clock();
r_time_taken=((double)(end-start))/CLOCKS_PER_SEC;
printf("\nTime with Randomized Quick sort: %f",r_time_taken);
printf("\n\nFor Sorted Array");
for(i=0;i<=n;i++)
{
a[i]=i;
}
printf("\nArray size: %d",n);
quick_sort(a,0,n);
printf("\nTotal steps of Quick sort: %d",count);
quick_sort_rand(a,0,n);
printf("\nTotal steps of Randomized Quick sort: %d",r_count);
start=clock();
sorting_time(a,0,n);
end=clock();
time_taken=((double)(end-start))/CLOCKS_PER_SEC;
printf("\nTime with Quick sort: %f",time_taken);
time_taken=0;
start=clock();
rand_sorting_time(a,0,n);
end=clock();
r_time_taken=((double)(end-start))/CLOCKS_PER_SEC;
printf("\nTime with Randomized Quick sort: %f",r_time_taken);
r_time_taken=0;
}
Output:
Conclusion:
In this Practical, I understand to Implement program for randomized
version of quick sort.
And also, compare its performance with normal version of quick sort
using steps count on various number of inputs.
Comments
Post a Comment