1. 程式人生 > >歸併排序遞迴與非遞迴的實現

歸併排序遞迴與非遞迴的實現

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;
}