#define MAX 9999999
void mergeMAX(TYPE A[], int p, int q, int r)
{
int n1 = q-p+1, i, j, k;
int n2 = r-q;
TYPE L[N/2 + 2], R[N/2+2];
for(i = 0; i < n1; ++i) L[i] = A[p+i]; L[i] = MAX;
for(i = 0; i < n2; ++i) R[i] = A[q+i+1]; R[i] = MAX;
i = j = 0;
for(k = p; k <= r; ++k)
{
if(L[i]<R[j]){
A[k] = L[i];
++i;
}
else {
A[k] = R[j];
++j;
}
}
}
void merge(TYPE A[], int p, int q, int r)
{
int n1 = q-p+1, n2 = r-q, i, j, k;
TYPE L[N/2+2], R[N/2+2];
for(i = 0; i < n1; ++i) L[i] = A[p+i];
for(i = 0; i < n2; ++i) R[i] = A[q+1+i];
i = j = 0; k = p;
while(i<n1 && j<n2){
if(L[i]<R[j]){
A[k] = L[i];
++i;
}else
{
A[k] = R[j];
++j;
}
++k;
}
while(i<n1){A[k] = L[i];++k;++i;}
while(j<n2){A[k] = R[j];++k;++j;}
}
void mergeLowMemory(TYPE A[], int p, int q, int r)
{
int i , start = q+1, k;
TYPE tempMin;
for(i = p; i <= q; ++i)
{
if(A[i] > A[start]) {
tempMin = A[i];
A[i] = A[start];
k = start + 1;
while(k<=r && A[k] < tempMin){
A[k-1] = A[k];
++k;
}
A[k-1] = tempMin;
}
}
}
void mergeSort(TYPE 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);
}
}
归并排序
最新推荐文章于 2021-12-06 00:09:43 发布