归并排序也就是把一个数列分成两份,首先分别对2份进行排序,然后把这2份一起排序,典型的递归实现.
实现代码: MergeSort.h:
//归并排序时间复杂度:NlogN,但是由于存在
// for(int i=0;i!=length;++i)
// *first++=*(assistSpace+i);
//数据的复制需要额外的时间,减慢了排序的速度。
#ifndef ___MERGE_SORT_H
#define ___MERGE_SORT_H
namespace zk_sima
{
template<typename Iterator ,typename Object>
void Merge(Iterator first,Iterator middle,Iterator last,Object)
{
int length=last-first;
if(length<0)
return ;
Object* assistSpace=(Object*)calloc(length,sizeof(Object));
Object* pPoint=assistSpace;
Iterator _first=first,_middle=middle;
while(_first!=middle&&_middle!=last)
{
if(*_first<*_middle)
*pPoint++=*_first++;
else
*pPoint++=*_middle++;
}
if(_first==middle)
{
while(_middle!=last)
*pPoint++=*_middle++;
}
else
while(_first!=middle)
*pPoint++=*_first++;
for(int i=0;i!=length;++i)
*first++=*(assistSpace+i);
free(assistSpace);
assistSpace=0;
}
template<typename Iterator>
void MergeSort(Iterator first,Iterator last)
{
Iterator middle=first+(last-first)/2;
if(first+1<middle)
MergeSort(first,middle);
if(middle+1<last)
MergeSort(middle,last);
Merge(first,middle,last,*first);
}
}
#endif
本文介绍了归并排序的原理,通过递归将数列分成两部分进行排序,然后合并已排序的部分,以达到整体有序。归并排序的时间复杂度为NlogN,但因数据复制导致速度稍慢。提供了C++实现的MergeSort模板函数,包括Merge和MergeSort两个关键方法。
689

被折叠的 条评论
为什么被折叠?



