Merge sort
Let a be an
array of n numbers. Our aim is to sort this array in ascending order using
merge sort. The steps to be followed are
i)
Divide the array into n sub arrays with
size 1.
ii)
Merge adjacent pair of sub arrays [a[1]]
and [a[2]], [a[3]] and [a[4]], …….,
[a[n-1]] and [a[n]].
Now we will get a n/2 sorted sub arrays of size 2 or less.
iii)
Merge adjacent pairs of sub arrays
[a[1]] and [a[2]], [a[3]] and [a[4]], ……., [a[n-3]], [a[n-2]] and [a[n-1
iv)
Repeat this process until ther]], [a[n]].
Now we will get a n/4 sorted sub arrays of size 4 or less.e is only one sub
array of size n.
Now this array will be
in sorted order
Sort
the given array of numbers in ascending order. Suppose the numbers in the array
a are
Procedure
merge
(a, n) // a – given array, n – size of the array
{
L
= 1 ; // Initial size of the sub array
while
(L ≤ n) do // size of sub array should be less than n
{
low
1 = 1 ; // first element location in the first sub
array.
k
= 1 ;
while
(low 1 + L ≤ n) do // to check whether
merge is possible
{
low
2 = low 1 + L ; // to find the second
sub array of size L
high
1 = low 2 – 1;
if
( low 2 + L-1 ≤ n) then
high
2 = low 2 + L-1 ;
else
high
2 = n-1 ;
i
= low 1 ;
j
= low 2 ;
while ( i≤ high 1 && j ≤ high 2) do
{
if( a[i] < a[j] then
{ b[k]
= a[j] ; k= k + i ; i= i+1 ; }
else
{ b[k] = a[j] ; k=k+1 ; j=j+1 ;}
}
while(
i≤ high 1) do // if second sub array
becomes empty, copy the remaining
{ a[k] = a[i] ; //elements from first
sub array to array b
k
= k+1 ;
i
= i+1 ;
}
while (j≤ high 2) do //if first sub array becomes empty,
{ b[k] = a[j] ; // copy the remaining elements
from
k
= k+1 ; j = j+1 ;
}
low
1 = high 2 + 1; // second sub array to
array b
}
i
= low 1;
while
( k ≤ n) do // to check whether all
elements in
{ b[k] = a[i] ; // array a are compared and copied in b
k
= k+1 ; i= i+1 ;
}
for
i = 1 to n do // to copy the elements from b
a[i]
= b[i] ; // array to a array to repeat
the above process
L
= 2 * L ; // to change the size of the
sub array.
}
}
No comments:
Post a Comment