算法导论-----归并排序

时间:2021-11-21 04:11:53
void Merge(int *A,int p,int q,int r)
{
    int n1=q-p+1;
    int n2=r-q;
    int *L=new int[n1];
    int *R=new int[n2];


    for(int i=0;i<=n1-1;++i)
    {
        L[i]=A[p+i];
    }

    for(int j=0;j<=n2-1;++j)
    {
        R[j]=A[q+j+1];
    }

    for(int k=p,i=0,j=0;k<=r;++k)
    {
        if(L[i]<=R[j])
        {
            A[k]=L[i++];
        }
        else
        {
            A[k]=R[j++];
        }

        if(i==n1)
        {
            while(j<n2)
            {
                A[++k]=R[j++];
            }
            break;
        }
        else if(j==n2)
        {
            while(i<n1)
            {
                A[++k]=L[i++];
            }
            break;
        }
        else
            continue;
    }
    delete[] L;
    delete[] R;
}

void Merge_Sort(int *A,int p,int r)
{

    if(p<r)
    {
        int q=0;
        q=(p+r)/2;
        Merge_Sort(A,p,q);
        Merge_Sort(A,q+1,r);
        Merge(A,p,q,r);
    }
    else
        return ;
}
int _tmain(int argc, _TCHAR* argv[])
{
    int A[]={44,51,27,71,26,32,69};
    Merge_Sort(A,0,sizeof(A)/sizeof(A[0])-1);

    for(int i=0;i<sizeof(A)/sizeof(A[0]);++i)
    {
        printf("%d ",A[i]);
    }
    printf("\n");

    system("pause");
    return 0;
}