KEMBAR78
Merge sort code in C explained | PPTX
MERGE SORT UNDERSTANDING CODE in CBy-MohitTare      mohittare@yahoo.com
MERGE  SORT – understanding code#include<stdio.h>intmergesort(int*,int,int);void merge(int*,int,int,int);int main(){int a[5]={3,5,2,6,8};inti;mergesort(a,0,4);	for(i=0;i<5;i++)printf("\n%d",a[i]);	return 0;}3    5    2     6    8
intmergesort(inta[], int low, int high){			0,4int mid;			if(low<high){    mid=(low+high)/2;(2)mergesort(a,low,mid);(a,0,2)mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}intmergesort(int a[], int low, int high){			0,0int mid;if(low<high)(0<0-false){mid=(low+high)/2;mergesort(a,low,mid);mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);(now return will give control toNearest function call)}intmergesort(int a[], int low, int high){			0,2int mid;if(low<high){mid=(low+high)/2;(1)mergesort(a,low,mid);(0,1)mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}intmergesort(int a[], int low, int high){			0,1int mid;if(low<high){mid=(low+high)/2;(0)mergesort(a,low,mid);(0,0)mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}
intmergesort(inta[], int low, int high){			0,1int mid;if(low<high){    mid=(low+high)/2;(0)mergesort(a,low,mid);mergesort(a,mid+1,high);merge(a,low,high,mid);}		0,1,0return(0);}intmergesort(int a[], int low, int high){			0,0int mid;if(low<high)(0<0-false){mid=(low+high)/2;mergesort(a,low,mid);mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}intmergesort(int a[], int low, int high){			(1,1)int mid;if(low<high)(1<1-false){mid=(low+high)/2;mergesort(a,low,mid);mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}intmergesort(int a[], int low, int high){			0,1int mid;if(low<high){mid=(low+high)/2;(0)mergesort(a,low,mid);(0,0)mergesort(a,mid+1,high);(0+1,1)merge(a,low,high,mid);}return(0);}
Until now array has been divided into 1 element each. Now array is merged and sorted in the merge function
void merge(int a[], int low, int high, int mid){                                 0,1,0int b[20],l1,r1,i;l1=low;0										r1=mid+1;1					      l1       r1                                          ii=low;0					while((l1<=mid) && (r1<=high)){          0<=0                      1<=1	if(a[l1]<a[r1])	{    3<5		b[i]=a[l1];b[0]=3		l1=l1+1;l1=1i=i+1;i1=1	}	else 	{		b[i]=a[r1];		r1=r1+1;i=i+1;	}}while(l1<=mid)1<=0{	b[i]=a[l1];	l1=l1+1;i=i+1;}while(r1<=high)1<=1{	b[i]=a[r1];b[1]=5	r1=r1+1;r1=2i=i+1;i=2}For(j=low;j<i;j++)	a[j]=b[j];}3                	 3    5    2     6    8	 1.3    5            	 3    5    2     6    8	 i3    5
|----------------------;|----------------------;while(r1<=high){	b[i]=a[r1];	r1=r1+1;i=i+1;}It will transfer the  current values  of   b array to  a arrayfor(j=low;j<i ;j++){	a[j]=b[j];}}
IN  next recursive pass or call to merge 3    5            	 3    5    2     6    8	 void merge(int a[], int low, int high, int mid){	            0,2,1int b[20],l1,r1,i;l1=low;0r1=mid+1;2                                                                                             l1             r1              i=low;0while((l1<=mid) && (r1<=high)){          0<=1                    2<=2	if(a[l1]<a[r1])	{    3<2		b[i]=a[l1];		l1=l1+1;                                                      l1i=i+1;	}	else 	{		b[i]=a[r1];b[0]=2		r1=r1+1;r1=3i=i+1;i=1	}}while(l1<=mid)0<=1{	b[i]=a[l1];b1=3        	l1=l1+1;l1=1            i=i+1;i=2                   }while(r1<=high)3<=2{	b[i]=a[r1];	r1=r1+1;i=i+1;}for(j=low;j<i;j++)	a[j]=b[j];}3    5            	 3    5    2     6    8	 3    5    2     6    8	 2    5            	 r13    5    2     6    8	 2    3            	 3    5    2     6    8	 2    3     5
IN  next recursive pass or call to merge 2    3     5       	 2    3    5     6    8	 void merge(int a[], int low, int high, int mid){		a,3,4,3int b[20],l1,r1,i;l1=low;l1=3r1=mid+1;r1=4i=low;i=3while((l1<=mid) && (r1<=high)){          3<=3                 4<=4	if(a[l1]<a[r1])	{		b[i]=a[l1];b[3]=6		l1=l1+1;l1=4i=i+1;i1=4	}	else 	{		b[i]=a[r1];		r1=r1+1;i=i+1;	}}while(l1<=mid){	b[i]=a[l1];	l1=l1+1;i=i+1;}while(r1<=high)4<=4{	b[i]=a[r1];b[4]=8	r1=r1+1;r1=5i=i+1;i=5}For(j=low;j<i;j++)	a[j]=b[j];}2    3    5    6    8	 2    3     5       	 2    3     5     6  	 2    3    5     6    8	 2    3     5    6    8
IN  LAST  recursive pass or call to merge 2    3     5    6    8	 2    3    5     6    8	 void merge(int a[], int low, int high, int mid){	           0,4,2int b[20],l1,r1,i;l1=low;l1=0r1=mid+1;r1=3i=low;i=0while((l1<=mid) && (r1<=high)){             0<=2              3<=4	if(a[l1]<a[r1])	{     2<6		b[i]=a[l1];b[0]=2		l1=l1+1;l1=1i=i+1;i=1	}	else 	{		b[i]=a[r1];		r1=r1+1;i=i+1;	}}while(l1<=mid){	b[i]=a[l1];	l1=l1+1;i=i+1;}while(r1<=high)3<=4{	b[i]=a[r1];b[3]=6	r1=r1+1;r1=4i=i+1;i=4}For(j=low;j<i;j++	a[j]=b[j];}2    3    5    6    8	 2    3     5    6    8	 2    3    5    6    8	 2    3     5    6    8	 2    3    5    6    8	 2    3     5    6    8	 2    3    5    6    8	 2    3     5    6    8	 2    3    5    6    8	 2    3     5    6    8
FINALLYSORTED ARRAY2    3    5    6    8
THANK YOU!

Merge sort code in C explained

  • 1.
    MERGE SORT UNDERSTANDINGCODE in CBy-MohitTare mohittare@yahoo.com
  • 2.
    MERGE SORT– understanding code#include<stdio.h>intmergesort(int*,int,int);void merge(int*,int,int,int);int main(){int a[5]={3,5,2,6,8};inti;mergesort(a,0,4); for(i=0;i<5;i++)printf("\n%d",a[i]); return 0;}3 5 2 6 8
  • 3.
    intmergesort(inta[], int low,int high){ 0,4int mid; if(low<high){ mid=(low+high)/2;(2)mergesort(a,low,mid);(a,0,2)mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}intmergesort(int a[], int low, int high){ 0,0int mid;if(low<high)(0<0-false){mid=(low+high)/2;mergesort(a,low,mid);mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);(now return will give control toNearest function call)}intmergesort(int a[], int low, int high){ 0,2int mid;if(low<high){mid=(low+high)/2;(1)mergesort(a,low,mid);(0,1)mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}intmergesort(int a[], int low, int high){ 0,1int mid;if(low<high){mid=(low+high)/2;(0)mergesort(a,low,mid);(0,0)mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}
  • 4.
    intmergesort(inta[], int low,int high){ 0,1int mid;if(low<high){ mid=(low+high)/2;(0)mergesort(a,low,mid);mergesort(a,mid+1,high);merge(a,low,high,mid);} 0,1,0return(0);}intmergesort(int a[], int low, int high){ 0,0int mid;if(low<high)(0<0-false){mid=(low+high)/2;mergesort(a,low,mid);mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}intmergesort(int a[], int low, int high){ (1,1)int mid;if(low<high)(1<1-false){mid=(low+high)/2;mergesort(a,low,mid);mergesort(a,mid+1,high);merge(a,low,high,mid);}return(0);}intmergesort(int a[], int low, int high){ 0,1int mid;if(low<high){mid=(low+high)/2;(0)mergesort(a,low,mid);(0,0)mergesort(a,mid+1,high);(0+1,1)merge(a,low,high,mid);}return(0);}
  • 5.
    Until now arrayhas been divided into 1 element each. Now array is merged and sorted in the merge function
  • 6.
    void merge(int a[],int low, int high, int mid){ 0,1,0int b[20],l1,r1,i;l1=low;0 r1=mid+1;1 l1 r1 ii=low;0 while((l1<=mid) && (r1<=high)){ 0<=0 1<=1 if(a[l1]<a[r1]) { 3<5 b[i]=a[l1];b[0]=3 l1=l1+1;l1=1i=i+1;i1=1 } else { b[i]=a[r1]; r1=r1+1;i=i+1; }}while(l1<=mid)1<=0{ b[i]=a[l1]; l1=l1+1;i=i+1;}while(r1<=high)1<=1{ b[i]=a[r1];b[1]=5 r1=r1+1;r1=2i=i+1;i=2}For(j=low;j<i;j++) a[j]=b[j];}3 3 5 2 6 8 1.3 5 3 5 2 6 8 i3 5
  • 7.
    |----------------------;|----------------------;while(r1<=high){ b[i]=a[r1]; r1=r1+1;i=i+1;}It will transferthe current values of b array to a arrayfor(j=low;j<i ;j++){ a[j]=b[j];}}
  • 8.
    IN nextrecursive pass or call to merge 3 5 3 5 2 6 8 void merge(int a[], int low, int high, int mid){ 0,2,1int b[20],l1,r1,i;l1=low;0r1=mid+1;2 l1 r1 i=low;0while((l1<=mid) && (r1<=high)){ 0<=1 2<=2 if(a[l1]<a[r1]) { 3<2 b[i]=a[l1]; l1=l1+1; l1i=i+1; } else { b[i]=a[r1];b[0]=2 r1=r1+1;r1=3i=i+1;i=1 }}while(l1<=mid)0<=1{ b[i]=a[l1];b1=3 l1=l1+1;l1=1 i=i+1;i=2 }while(r1<=high)3<=2{ b[i]=a[r1]; r1=r1+1;i=i+1;}for(j=low;j<i;j++) a[j]=b[j];}3 5 3 5 2 6 8 3 5 2 6 8 2 5 r13 5 2 6 8 2 3 3 5 2 6 8 2 3 5
  • 9.
    IN nextrecursive pass or call to merge 2 3 5 2 3 5 6 8 void merge(int a[], int low, int high, int mid){ a,3,4,3int b[20],l1,r1,i;l1=low;l1=3r1=mid+1;r1=4i=low;i=3while((l1<=mid) && (r1<=high)){ 3<=3 4<=4 if(a[l1]<a[r1]) { b[i]=a[l1];b[3]=6 l1=l1+1;l1=4i=i+1;i1=4 } else { b[i]=a[r1]; r1=r1+1;i=i+1; }}while(l1<=mid){ b[i]=a[l1]; l1=l1+1;i=i+1;}while(r1<=high)4<=4{ b[i]=a[r1];b[4]=8 r1=r1+1;r1=5i=i+1;i=5}For(j=low;j<i;j++) a[j]=b[j];}2 3 5 6 8 2 3 5 2 3 5 6 2 3 5 6 8 2 3 5 6 8
  • 10.
    IN LAST recursive pass or call to merge 2 3 5 6 8 2 3 5 6 8 void merge(int a[], int low, int high, int mid){ 0,4,2int b[20],l1,r1,i;l1=low;l1=0r1=mid+1;r1=3i=low;i=0while((l1<=mid) && (r1<=high)){ 0<=2 3<=4 if(a[l1]<a[r1]) { 2<6 b[i]=a[l1];b[0]=2 l1=l1+1;l1=1i=i+1;i=1 } else { b[i]=a[r1]; r1=r1+1;i=i+1; }}while(l1<=mid){ b[i]=a[l1]; l1=l1+1;i=i+1;}while(r1<=high)3<=4{ b[i]=a[r1];b[3]=6 r1=r1+1;r1=4i=i+1;i=4}For(j=low;j<i;j++ a[j]=b[j];}2 3 5 6 8 2 3 5 6 8 2 3 5 6 8 2 3 5 6 8 2 3 5 6 8 2 3 5 6 8 2 3 5 6 8 2 3 5 6 8 2 3 5 6 8 2 3 5 6 8
  • 11.
  • 12.