归并排序

#include<iostream.h>
void Merge(int *a,int p,int q,int r)//合并一个数组中前后两个有序序列
{                                    //p,q,r是数组下标,a[p---q],a[q+1---r]两个有序
    int *pA=a+p;
    int *pB=a+q+1;
    while(pA!=pB&&pB<=a+r)
    {
        if(*pA<=*pB)
            pA++;
        else
        {
            int temp=*pB;
            for(int *pTemp=pB;pTemp>pA;pTemp--)//pA至pB-1后移一位
                *pTemp=*(pTemp-1);
            *pA=temp;//
            pA++;
            pB++;
        }
    }
}
void MergeSort(int *a,int m,int n)
{
    int q=(m+n)/2;
    if(m<n)
    {
        MergeSort(a,m,q);
        MergeSort(a,q+1,n);
        Merge(a,m,q,n);
    }
}
void main()
{
    int a[]={5,4,7,0,1,6,3,9,3,6,7,34,56,37,26};
    MergeSort(a,0,14);
    for(int i=0;i<15;i++)
        cout<<a[i]<<"  ";
}

posted on 2012-10-14 22:59  为梦飞翔  阅读(183)  评论(0编辑  收藏  举报

导航