您的位置:首页 > 其它

算法学习—— 归并排序

2013-03-18 00:44 309 查看
归并排序法(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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: