歸併排序遞迴與非遞迴的實現
阿新 • • 發佈:2019-02-16
void merge(int a[],int b[],int l,int m,int r){
// int *b=new int[r-l+1]; int i,j,k;
i=l;
j=m+1;
k=l;
while(i<=m&&j<=r){
if(a[i]<a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=m)
b[k++]=a[i++];
while (j<=r)
b[k++]=a[j++];
for(int s=l;s<=r;s++)
a[s]=b[s];
// delete[] b;}
void msort(int a[],int b[],int l,int r){
if(l<r){
int m=(l+r)/2;
msort(a,b,l,m);
msort(a,b,m+1,r);
merge(a,b,l,m,r);
}
}
void merge_sort(int a[],int n){
_FUNC;
int *b=new int[n];
msort(a,b,0,n-1);
delete[] b;
}
// int *b=new int[r-l+1]; int i,j,k;
i=l;
j=m+1;
k=l;
while(i<=m&&j<=r){
if(a[i]<a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=m)
b[k++]=a[i++];
while
b[k++]=a[j++];
for(int s=l;s<=r;s++)
a[s]=b[s];
// delete[] b;}
void msort(int a[],int b[],int l,int r){
if(l<r){
int m=(l+r)/2;
msort(a,b,l,m);
msort(a,b,m+1,r);
merge(a,b,l,m,r);
}
}
void merge_sort(int a[],int n){
_FUNC;
int
msort(a,b,0,n-1);
delete[] b;
}