分治法--归并排序
#include <stdlib.h>
#include <stdio.h>
#define Len 20
typedef int RecType;
void Merge(RecType A[],int p,int q,int r)
{
RecType *R1;
int i = p,j = q + 1,k = 0;
R1 = (RecType*)malloc((r-p+1)*sizeof(RecType));
while(i <= q && j <= r)
{
if(A[i] < A[j])
{
R1[k] = A[i];
k++;
i++;
}else{
R1[k] = A[j];
k++;
j++;
}
}
while(i <= q)
{
R1[k] = A[i];
k++;
i++;
}
while(j <= r)
{
R1[k] = A[j];
j++;
k++;
}
for(k = 0,i = p;i <= r;i++,k++)
{
A[i] = R1[k];
}
}
void MergeSort(RecType 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);
}
}
void print(RecType A[])
{
int i;
for(i = 0;i < Len;i++)
{
printf("%d ",A[i]);
}
printf("\n");
}
int main()
{
RecType A[Len] = {2,4,6,1,8,34,23,78,13,6,9,22,11,33,14,26,5,3,56,12};
MergeSort(A,0,19);
print(A);
return 0;
}