Saturday 28 July 2012

merge sort


#include<iostream.h>
#include<conio.h>
int array[50];
int n;
void mergesort(int ,int,int);
void merge(int low,int high)
{
      int mid;
      if(low<high)
      {
            mid=(low+high)/2;
            merge(low,mid);
            merge(mid+1,high);
            mergesort(low,high,mid);
      }
      else
            return;
}
void mergesort(int low,int high,int mid)
{
      int i,j,k,c[50];
      i=low;
      j=mid+1;
      k=low;
      while((i<=mid) && (j<=high))
      {
            if(array[i]<array[j])
                  c[k++]=array[i++];
            else
                  c[k++]=array[j++];
      }
      while(i<=mid)
            c[k++]=array[i++];
      while(j<=high)
            c[k++]=array[j++];

      for(i=low;i<k;i++)
            array[i]=c[i];
}

void display()
{
      cout<<"\n\ncontent of array is :\n";
      for(int i=0;i<n;i++)
            cout<<"   "<<array[i];
}

void main()
{
      clrscr();
      cout<<"Number of elements :";
      cin>>n;
      for(int i=0;i<n;i++)
      {
            cout<<"\nEnter element "<<i+1<<" : ";
            cin>>array[i];
      }
      merge(0,n-1);
      display();
      getch();
}

1 comment:

  1. 1. divide and conquer and stable.

    2. In worst case merge sort does 39% fewer comparisons than quick sort does in avg. case.

    3. Merge sort doesnot sort in place and uses 2n memory location.

    4. In merge sort division is easy but joining is difficult whereas in quicksort division is difficult and joining is easy.

    ReplyDelete