归并排序的实现
来源:互联网 发布:阿里云 二级域名 编辑:程序博客网 时间:2024/05/17 02:43
定义:
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 (从百度百科上摘抄下来的)
基本的实现可以如下表示:
void merger_sort(Iterator first,Iterator last)
{
if(last-first<=1)
return ;
Iterator middle=first+(last-first)/2;
merger_sort(first,middle);
merger_sort(middle,last);
sort(first,middle,last,*first);
}
首先吧区间的左半边排序 即:merger_sort(first,middle);
然后把区间的右半边排序 即:merger_sort(middle,last);
最后再把两个区间合并: sort(first,middle,last,*first);
合并的算法如下:
for( i=0;front!=mid&&middle!=last;++i)
{
if(*front>*middle)
{
tempContainer[i]=*middle;
++middle;
}
else
{
tempContainer[i]=*front;
++front;
}
}
if(front==mid)
{
for(;middle!=last;++middle)
tempContainer[i++]=*middle;
}
else
for(;front!=mid;++front)
tempContainer[i++]=*front;
首先是:
if(*front>*middle)
{
tempContainer[i]=*middle;
++middle;
}
else
{
tempContainer[i]=*front;
++front;
}
然后把剩下的部分直接赋给剩下的空间:
if(front==mid)
{
for(;middle!=last;++middle)
tempContainer[i++]=*middle;
}
else
for(;front!=mid;++front)
tempContainer[i++]=*front;
完整代码:
测试代码:
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- 归并排序的实现
- Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在
- Linq to Entity CRUD
- JSON中,java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决
- window.returnValue使用方法
- CString转换为double【创+转】
- 归并排序的实现
- mysql 安装MySQL5.5.10成功!
- H.264
- sax解析XML
- 管理自己
- 短信平台 下载 c#
- web form原理
- led日光灯驱动电源
- sqlserver 函数 根据汉字的首字母匹配汉字