include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define max 10000
//归并排序 数组A A[p..q] A[q+1..r]
void Merge(int A[],int p,int q,int r)
{
int n1,n2;
int k=0;
int i,j;
n1 = q-p+1; //left length
n2 = r-q; //right length
int L[n1],R[n2];
for(i=1 ; i<=n1 ; i++)
L[i] = A[p+i-1];
for(j=1 ; j<=n2 ; j++)
R[j] = A[q+j];
L[n1+1] = max;
R[n2+1] = max;
i=1;
j=1;
for(k=p;k<=r;k++)
{
if(L[i]<=R[j])
{
A[k] = L[i];
i++;
}
else
{
A[k] = R[j];
j++;
}
}
return 0;
}
void MergeSort(int A[],int p,int r)
{
int q;
if(p < r)
{
q = (int)((p+r)/2);
MergeSort(A,p,q);
MergeSort(A,q+1,r);
Merge(A,p,q,r);
}
return 0;
}
int main(void)
{
int i=0;
int A[]={2,4,5,7,1,3,2,3,4,4,6};
MergeSort(A,0,10);
for(i=0;i<11;i++)
{
printf("%d ",A[i]);
}
return 0;
}
算法导论中的归并排序C语言实现
最新推荐文章于 2023-06-30 21:30:00 发布