归并排序的实现(again)
来源:互联网 发布:中国移动数据漫游资费 编辑:程序博客网 时间:2024/06/16 22:24
归并排序也就是把一个数列分成两份,首先分别对2份进行排序,然后把这2份一起排序,典型的递归实现.
实现代码: MergeSort.h:
//归并排序时间复杂度:NlogN,但是由于存在
// for(inti=0;i!=length;++i)
// *first++=*(assistSpace+i);
//数据的复制需要额外的时间,减慢了排序的速度。
#ifndef ___MERGE_SORT_H
#define ___MERGE_SORT_H
namespace zk_sima
{
template<typename Iterator,typename Object>
voidMerge(Iteratorfirst,Iteratormiddle,Iteratorlast,Object)
{
intlength=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>
voidMergeSort(Iteratorfirst,Iteratorlast)
{
Iteratormiddle=first+(last-first)/2;
if(first+1<middle)
MergeSort(first,middle);
if(middle+1<last)
MergeSort(middle,last);
Merge(first,middle,last,*first);
}
}
#endif
- 归并排序的实现(again)
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- GDB符号调试器(二)
- oracle 创建分区
- [019] Android平台调用WebService详解
- 浅谈软件架构师的基本素质
- 浅谈如何学习linux
- 归并排序的实现(again)
- 基于CAN总线智能建筑监控系统的通信协议设计
- VC++中使用内存映射文件处理大文件
- 20110517
- 算法题22 把二元查找树转变成排序的双向链表(中序遍历)
- 算法题23 在二元树中找出和为某一值的所有路径
- CAN通讯协议简介
- POJ 1056 字符串
- 算法题24 根据上排给出十个数,在其下排填出对应的十个数