算法学习—— 归并排序

归并排序法(Merge Sort)是分治法思想运用的一个典范。

其主要算法操作可以分为以下步骤:

Step 1:将n个元素分成两个含n/2元素的子序列

Step 2:用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列)

Step 3:合并两个已排序好的序列

每天进步一点点!

c++代码如下:
View Code
class MergeSort
{
    public:
        void Merge(int* data,int left,int center,int right);
        void Sort(int* data,int left,int right);
};

void MergeSort::Sort(int* data,int left,int right)
{
    if(left < right)
    {
        int center = (left + right)/2;
        Sort(data,left,center);
        Sort(data,center + 1,right);
        Merge(data,left,center,right);
    }
}

void MergeSort::Merge(int* data,int left,int center,int right)
{
    int n1 = center - left + 1;
    int n2 = right -center;
    int leftArr[n1];
    int rightArr[n2];
    int i;
    int j;
    int k;
    for(i = 0;i < n1;++i)
    {
        leftArr[i] = data[left + i];
    }
    for(j = 0;j < n2;++j)
    {
        rightArr[j] = data[center + j + 1];
    }

    i = j = 0;
    for(k = left;k <= right;++k)
    {
        if(leftArr[i] <= rightArr[j])
        {
            data[k] = leftArr[i];
            ++i;
        }
        else
        {
            data[k] = rightArr[j];
            ++j;
        }

        if(n1 == i)
        {
            ++k;
            for(;j < n2;++j)
            {
                data[k] = rightArr[j];
                ++k;
            }
        }
        if(n2 == j)
        {
            ++k;
            for(;i < n1;++i)
            {
                data[k] = leftArr[i];
                ++k;
            }
        }
    }
}

 

posted @ 2013-03-18 00:44  rockorange  阅读(178)  评论(0编辑  收藏  举报