pseudo-code:
MERGE-SORT(A, p, r)
1 if p < r
2 q = (p + r) / 2
3 MERGE-SORT(A, p, q)
4 MERGE-SORT(A, q+1, r)
5 MERGE(A, p, q, r)
MERGE(A, p, q, r)
1 n1 = q - p +1
2 n2 = r - q
3 let L[1....n1 + 1] and R[1....n2 + 1] be new array
4 for i = 1 to n1
5 L[i] = A[p + i - 1]
6 for j = 1 to n2
7 R[j] = A[q + j]
8 L[n1 + 1] = INT_MAX
9 R[n2 + 1] = INT_MAX
10 for k = p to r
11 i = 1
12 j = 1
13 if L[i] <= R[j]
14 A[k] = L[i]
15 i = i + 1
16 else A[k] = R[j]
17 j = j + 1
C语言实现:
void Merge ( int A [], int p , int q, int r )
{
int L [ 100], R[ 100 ];
int n1 = q - p + 1 ;
int n2 = r - q;
for ( int i = 0 ; i < n1; i++)
L [i ] = A[ p + i];
for ( int j = 0 ; j < n2; j++)
R [j ] = A[ q + j + 1 ];
L [n1 ] = INT_MAX;
R [n2 ] = INT_MAX;
int i = 0 ;
int j = 0 ;
for ( int k = p ; k <= r; k++)
{
if ( L [i ] <= R[ j ])
A [k ] = L[ i ++];
else
A [k ] = R[ j ++];
}
}
void Merge_Sort ( int A [], int p , int r) // p, r 为下标
{
if ( p < r)
{
int q = ( p + r ) / 2;
Merge_Sort (A , p , q );
Merge_Sort (A , q + 1 , r );
Merge (A , p , q , r );
}
}
复杂度: O (Nlog(N) )