Merge - Sort
Merge - Sort
-2
An Example: Merge Sort
Sorting Problem: Sort a sequence of n elements into
non-decreasing order.
-3
Merge Sort – Example
Original Sequence Sorted Sequence
18 26 32 6 43 15 9 1 1 6 9 15 18 26 32 43
18 26 32 6 43 15 9 1 6 18 26 32 1 9 15 43
43
18 26 32 6 43 15 9 1 18 26 6 32 15 43 1 9
18 26 32 6 43 15 9 1 18 26 32 6 43 15 9 1
18 26 32 6 43 15 9 1
-5
Merge-Sort (A, p, r)
INPUT: a sequence of n numbers stored in array A
OUTPUT: an ordered sequence of n numbers
-6
Procedure Merge
Merge(A, p, q, r)
1 n1 q – p + 1
2 n2 r – q Input: Array containing
3 for i 1 to n1 sorted subarrays A[p..q]
4 do L[i] A[p + i – 1]
5 for j 1 to n2
and A[q+1..r].
6 do R[j] A[q + j]
Output: Merged sorted
7 L[n1+1]
8 R[n2+1] subarray in A[p..r].
9 i1
10 j 1
11 for k p to r
12 do if L[i] R[j]
13 then A[k] L[i] Sentinels, to avoid having to
14 ii+1
15 else A[k] R[j]
check if either subarray is
16 jj+1 fully copied at each step.
-7
Merge – Example
A … 61 86 26
8 32 1 32
9 26 9 42 43 …
k k k k k k k k k
L 6 8 26 32 R 1 9 42 43
i i i i i j j j j j
-8
MergeSort (Example) - 1
-9
MergeSort (Example) - 2
- 10
MergeSort (Example) - 3
- 11
MergeSort (Example) - 4
- 12
MergeSort (Example) - 5
- 13
MergeSort (Example) - 6
- 14
MergeSort (Example) - 7
- 15
MergeSort (Example) - 8
- 16
MergeSort (Example) - 9
- 17
MergeSort (Example) - 10
- 18
MergeSort (Example) - 11
- 19
MergeSort (Example) - 12
- 20
MergeSort (Example) - 13
- 21
MergeSort (Example) - 14
- 22
MergeSort (Example) - 15
- 23
MergeSort (Example) - 16
- 24
MergeSort (Example) - 17
- 25
MergeSort (Example) - 18
- 26
MergeSort (Example) - 19
- 27
MergeSort (Example) - 20
- 28
MergeSort (Example) - 21
- 29
MergeSort (Example) - 22
- 30
int Merge(int A[],int p, int q,int r)
{
int n1,n2,i,j,k; //size of left array=n1 and size of right array=n2
n1=q-p+1;
n2=r-q;
int L[n1],R[n2]; //initializing the value of Left part to L[]
for(i=0;i<n1;i++)
{
L[i]=A[p+i];
}
- 31
for(j=0;j<n2;j++) //initializing the value of Right Part to R[]
{
R[j]=A[q+j+1];
}
i=0,j=0;
- 32
//Comparing and merging them
//into new array in sorted order
for(k=p;i<n1&&j<n2;k++)
{
if(L[i]<R[j])
{
A[k]=L[i++];
}
else
{
A[k]=R[j++];
}
}
- 33
//If Left Array L[] has more elements than Right
Array R[]
//then it will put all the
// remaining elements of L[] into A[]
while(i<n1)
{
A[k++]=L[i++];
}
- 34
//If Right Array R[] has more elements than Left
Array L[]
//then it will put all the
// remaining elements of L[] into A[]
while(j<n2)
{
A[k++]=R[j++];
}
}
- 35
//This is Divide Part
//This part will Divide the array into
//Sub array and then will Merge them by calling Merge()
int MergeSort(int A[],int p,int r)
{ int q;
if(p<r)
{ q=(p+r)/2;
MergeSort(A,p,q);
MergeSort(A,q+1,r);
Merge(A,p,q,r);
}
}
- 36
int main() { int n;
cout<<"Enter size of the Array: ";
cin>>n;
int A[n],i;
cout<<"Enter array values:\n";
for(i=0;i<n;i++)
cin>>A[i];
MergeSort(A,0,n-1);
cout<<"The Sorted List is\n";
for(i=0;i<n;i++)
{
cout<<A[i]<<" ";
}
return 0;
}
- 37
- 38