归并排序算法C实现
#include
<
stdio.h
>
#include < stdlib.h >
int numarray[ 16 ] = ... {12,9,1,87,28,10,4,99,299,2,99,12,112,76,9,33} ;
void Merge( int A[], int l, int q, int r)
... {
int i,k,j;
int n1 = q-l+1;
int n2 = r-q;
int *LA = (int *)malloc(n1*sizeof(int));
int *RA = (int *)malloc(n2*sizeof(int));
for(i=0;i<n1;i++)
LA[i] = A[l+i];
for(i=0;i<n2;i++)
RA[i] = A[l+i+n1];
i=0,j=0;
for(k=0;k<r+1;k++)
...{
if(i==(n1) && j==(n2))
break;
if(i==(n1) && j<(n2))
...{
A[l+k] = RA[j];
j++;
continue;
}
if(i<(n1) && j==(n2))
...{
A[k+l] = LA[i];
i++;
continue;
}
if(LA[i]<=RA[j])
...{
A[k+l]=LA[i];
i++;
continue;
}
else
...{
A[k+l]=RA[j];
j++;
continue;
}
}
free(LA);
free(RA);
}
void MergeSort( int A[], int Left, int Right)
... {
if(Left<Right)
...{
int i = (Left+Right)/2;
MergeSort(A,Left,i);
MergeSort(A,i+1,Right);
Merge(A,Left,i,Right);
}
}
void main()
... {
int m;
MergeSort(numarray,0,15);
for(m=0;m<16;m++)
...{
printf("%d ",numarray[m]);
}
system("pause");
}
#include < stdlib.h >
int numarray[ 16 ] = ... {12,9,1,87,28,10,4,99,299,2,99,12,112,76,9,33} ;
void Merge( int A[], int l, int q, int r)
... {
int i,k,j;
int n1 = q-l+1;
int n2 = r-q;
int *LA = (int *)malloc(n1*sizeof(int));
int *RA = (int *)malloc(n2*sizeof(int));
for(i=0;i<n1;i++)
LA[i] = A[l+i];
for(i=0;i<n2;i++)
RA[i] = A[l+i+n1];
i=0,j=0;
for(k=0;k<r+1;k++)
...{
if(i==(n1) && j==(n2))
break;
if(i==(n1) && j<(n2))
...{
A[l+k] = RA[j];
j++;
continue;
}
if(i<(n1) && j==(n2))
...{
A[k+l] = LA[i];
i++;
continue;
}
if(LA[i]<=RA[j])
...{
A[k+l]=LA[i];
i++;
continue;
}
else
...{
A[k+l]=RA[j];
j++;
continue;
}
}
free(LA);
free(RA);
}
void MergeSort( int A[], int Left, int Right)
... {
if(Left<Right)
...{
int i = (Left+Right)/2;
MergeSort(A,Left,i);
MergeSort(A,i+1,Right);
Merge(A,Left,i,Right);
}
}
void main()
... {
int m;
MergeSort(numarray,0,15);
for(m=0;m<16;m++)
...{
printf("%d ",numarray[m]);
}
system("pause");
}