Time complexity O (N)
<! --
Code highlighting produced by actipro codehighlighter (freeware)
Http://www.CodeHighlighter.com/
--># Include<Stdio. h>
# Include<Stdlib. h>
Void Merge_sort_inner ( Int A [], Int P, Int R)
{
Int Q, I, J, K, N1, N2;
Int Temp, * L, * R;
If (P < R)
{
Q = (P + R) / 2 ;
Merge_sort_inner (A, p, q );
Merge_sort_inner (A, Q + 1 , R );
N1 = Q - P + 1 ;
N2 = R - Q;
L = ( Int * ) Malloc ( Sizeof ( Int ) * (N1 + 1 ));
R = ( Int * ) Malloc ( Sizeof ( Int ) * (N2 + 1 ));
For (I = 0 ; I < N1; I ++ )
L [I] = A [p + I];
For (I = 0 ; I < N2; I ++ )
R [I] = A [q + I + 1 ];
L [N1] = R [n2] = 2147483647 ;
I = 0 ;
J = 0 ;
For (K = P; k <= R; k ++ )
If (L [I] <= R [J])
A [k] = L [I ++ ];
Else
A [k] = R [J ++ ];
Free (L );
Free (R );
}
}
VoidMerge_sort (IntA [],IntN)
{
Merge_sort_inner (,0, N- 1);
}
Int Main ()
{
Int A [] = { 3 , 7 , 2 , 0 , 1 , 3 , 2 };
Int I;
Merge_sort (, 7 );
For (I = 0 ; I < 7 ; I ++ )
Printf ( " % D " , A [I]);
Printf ( "
" );
System ( " Pause " );
Return 0 ;
}