Merge Sort is a technique in which we use the algorithm of divide and conquer.
The input array is first divided into smaller sub-arrays, which are sorted in turn and again merged to get the original array in a sorted manner.
Lets see how it works :
This is our original array
Now we divide it into two parts :
Further these parts are sub divided ,
Then each part is sorted individually
Again these sub parts are merged in sorted manner
The input array is first divided into smaller sub-arrays, which are sorted in turn and again merged to get the original array in a sorted manner.
Lets see how it works :
This is our original array
24,56,12,34,3,78,32,9
Now we divide it into two parts :
24,56,12,34 3,78,32,9
Further these parts are sub divided ,
24,56 12,34 3,78 32,9
Then each part is sorted individually
24,56 12,34 3,78 9,32
Again these sub parts are merged in sorted manner
24,56 + 12,34 3,78 + 9,32
12,24,34,56 + 3,9,32,78
3,9,12,24,32,34,56,78
#include <iostream>
using
namespace
std;
void
merge(
int
*,
int
*,
int
,
int
,
int
);
void
mergesort(
int
*a,
int
*b,
int
low,
int
high)
{
int
pivot;
if
(low<high)
{
pivot=(low+high)/2;
mergesort(a,b,low,pivot);
mergesort(a,b,pivot+1,high);
merge(a,b,low,pivot,high);
}
}
void
merge(
int
*a,
int
*b,
int
low,
int
pivot,
int
high)
{
int
h,i,j,k;
h=low;
i=low;
j=pivot+1;
while
((h<=pivot)&&(j<=high))
{
if
(a[h]<=a[j])
{
b[i]=a[h];
h++;
}
else
{
b[i]=a[j];
j++;
}
i++;
}
if
(h>pivot)
{
for
(k=j; k<=high; k++)
{
b[i]=a[k];
i++;
}
}
else
{
for
(k=h; k<=pivot; k++)
{
b[i]=a[k];
i++;
}
}
for
(k=low; k<=high; k++) a[k]=b[k];
}
int
main()
{
int
a[] = {12,10,43,23,-78,45,123,56,98,41,90,24};
int
num;
num =
sizeof
(a)/
sizeof
(
int
);
int
b[num];
mergesort(a,b,0,num-1);
for
(
int
i=0; i<num; i++)
cout<<a[i]<<
" "
;
cout<<endl;
}
0 comments:
Post a Comment