模板& ltT類& gt
MERGE(T* A,int p,int q,int r)
{
int N1 = q - p + 1,N2 = r - q,I,j;
T * L = new T[n 1+2];//未使用的L[0]和R[0]
T* R =新T[N2+2];
for(I = 1;我& ltn 1+1;i++)
l[I]= A[p+I-1];
for(j = 1;j & ltN2+1;j++)
r[j]= A[q+j];
l[n 1+1]= maxnum;//定義壹個永遠不能到達的最大值作為哨兵。
r[N2+1]= maxnum;
I = 1;j = 1;
for(int k = p;k & lt= r;k++)
if(L[I]& lt;= R[j])
{
a[k]= L[I];
i++;
}
其他
{
a[k]= R[j];
j++;
}
}
模板& ltT類& gt
MERGE-SORT(T * A,int p,int r)
{
如果(p & ltr)
q =(p+r)/2;
MERGE-SORT(A,p,q);
MERGE-SORT(A,q+1,r);
MERGE(A,p,q,r);
}