时间复杂度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);
}
}
void merge_sort( int A[], int n)
{
merge_sort_inner(A, 0 , n - 1 );
}
int main()
{
int A[] = { 3 , 7 , 2 , 0 , 1 , 3 , 2 };
int i;
merge_sort(A, 7 );
for (i = 0 ; i < 7 ; i ++ )
printf( " %d " , A[i]);
printf( " " );
system( " pause " );
return 0 ;
}
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);
}
}
void merge_sort( int A[], int n)
{
merge_sort_inner(A, 0 , n - 1 );
}
int main()
{
int A[] = { 3 , 7 , 2 , 0 , 1 , 3 , 2 };
int i;
merge_sort(A, 7 );
for (i = 0 ; i < 7 ; i ++ )
printf( " %d " , A[i]);
printf( " " );
system( " pause " );
return 0 ;
}