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

来源:互联网 发布:无线键盘 游戏 知乎 编辑:程序博客网 时间:2024/05/29 05:01
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;}