归并最初的使用在与两个有序表的合并,从而引出对待排序数列的排序。两个有序表的合并在于合并之后,合并的表仍然有序。比如:
有序表(1):1 3 4 4 6
有序表(2):2 3 3 5 8
最后归并的的有序表为:1 2 3 3 4 4 5 6 8
当然,实现两个有序表的实现是比较简单容易的,为了不仅仅实现两张有序表的归并,而是为了用于之后归并排序的使用,这里用一个数组存储两张有序表,从0到m-1代表的是有序表1的范围,从m到n-1是有序表2的范围,对于上面的例子来说,m的值为5,n的值为10。
实现的方式如下:
template<class T>
void Merge(T * initList,T *mergedList,const int left,const int m,const int right)
{
int nMergeInd,nInitIndex_1,nInitIndex_2;
for(nMergeInd=left,nInitIndex_1=left,nInitIndex_2=m;nInitIndex_1<m && nInitIndex_2<right;nMergeInd++)
{
if(initList[nInitIndex_1]<=initList[nInitIndex_2])
{
mergedList[nMergeInd]=initList[nInitIndex_1];
nInitIndex_1++;
}
else
{
mergedList[nMergeInd]=initList[nInitIndex_2];
nInitIndex_2++;
}
}
copy(initList+nInitIndex_1,initList+m,mergedList+nMergeInd);
copy(initList+nInitIndex_2,initList+right,mergedList+nMergeInd);
}
说明: