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

Popular posts from this blog

Computer Architecture and Organization - 4

Design and Analysis of Algorithms - 2

Design and Analysis of Algorithms - 1

Artificial Intelligence - 7