#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 发布
本文详细介绍了在数据排序过程中使用内存优化算法,通过引入MAX宏定义与内存分配策略,实现快速排序的同时减少内存使用,特别适用于大规模数据集处理。文章深入探讨了算法的实现细节、性能对比与优化策略,旨在提升数据处理效率与资源利用率。
571

被折叠的 条评论
为什么被折叠?



