热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

合并排序(非哨兵方法)

subMerge2----非哨兵方法实现两个有序序列的合并templatevoidsubMerge2(vector&array,typenamevect

//subMerge2----非哨兵方法实现两个有序序列的合并
template
void subMerge2(vector &array,
typename vector::iterator iterBegin,
typename vector::iterator iterBarrier,
typename vector::iterator iterEnd)
{
//创建两个数组,分别存放以iterBarrier为界线的array的左边部分和右边部分
vector arrayLeft(iterBegin, iterBarrier+1);
vector arrayRight(iterBarrier+1, iterEnd);

//定义分别指向两个数组的迭代器
typename vector::iterator iterLeft = arrayLeft.begin();
typename vector::iterator iterRight = arrayRight.begin();

//定义指向原数组array的迭代器
typename vector::iterator iterArray = iterBegin;

//只要其中一个数组为空则跳出循环
while(iterLeft!=arrayLeft.end() && iterRight!=arrayRight.end())
{
if(*iterLeft <*iterRight) //如果左边小&#xff0c;将左边的值放入原数组
{
*iterArray &#61; *iterLeft;
&#43;&#43;iterLeft;
&#43;&#43;iterArray;
}
else //如果右边小&#xff0c;将右边的值放入原数组
{
*iterArray &#61; *iterRight;
&#43;&#43;iterRight;
&#43;&#43;iterArray;
}
}
//左边为空
if(iterLeft&#61;&#61;arrayLeft.end())
{
//将右边剩下的数据复制到原数组
//array.erase(iterArray, iterEnd);
//array.insert(iterArray, iterRight, arrayRight.end());
while(iterRight !&#61; arrayRight.end())
{
*iterArray &#61; *iterRight;
&#43;&#43;iterRight;
&#43;&#43;iterArray;
}
}
//右边为空
if(iterRight&#61;&#61;arrayRight.end())
{
//将左边剩下数据复制到原数组
//array.erase(iterArray, iterEnd);
//array.insert(iterArray, iterLeft, arrayLeft.end());
while(iterLeft !&#61; arrayLeft.end())
{
*iterArray &#61; *iterLeft;
&#43;&#43;iterLeft;
&#43;&#43;iterArray;
}
}
return;
}

用此函数代替之前mergeSort()中的 subMerge即可。其中在将左边或右边剩余元素复制到原数组的时候&#xff0c;如果用 vector成员函数insert&#xff0c;

必须先将iterArray所指位置右边的元素删除&#xff0c;不然会使iterArray右边的元素向后移动&#xff0c;导致元素个数增多。

转:https://www.cnblogs.com/haigege/archive/2011/12/23/2299302.html



推荐阅读
  • 深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树
    深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树 ... [详细]
  • PHP 数组逆序排列方法及常用排序函数详解 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 深入浅出解读奇异值分解,助你轻松掌握核心概念 ... [详细]
  • 本文深入剖析了jQuery的架构设计与实现原理。jQuery的总体结构采用了一个自执行匿名函数的形式,该函数接收`window`和`undefined`作为参数,并在内部定义了一个局部的jQuery副本,以确保其内部变量和方法不会污染全局命名空间。这种设计不仅提高了代码的封装性和安全性,还使得jQuery能够更好地与其他JavaScript库兼容。通过详细分析这一架构,读者可以更好地理解jQuery的核心机制及其高效运行的原理。 ... [详细]
  • 近日,百度推出了一项新功能,允许用户通过搜索框直接登录邮箱,这一创新举措显著提升了用户体验。这不仅体现了百度在搜索引擎技术方面的持续进步,也为未来的搜索技术发展提供了重要启示。通过整合多种服务,搜索引擎正逐渐成为用户日常生活中的多功能平台,未来有望实现更多便捷的功能和服务。 ... [详细]
  • 如何撰写PHP电商项目的实战经验? ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • 本文探讨了深度学习技术的基本原理及其广泛应用。通过分析深度学习的核心算法和模型结构,文章详细介绍了该技术在图像识别、自然语言处理和语音识别等领域的实际应用。此外,还讨论了深度学习在医疗诊断、自动驾驶和金融预测等方面的发展潜力和挑战。 ... [详细]
  • 初探设计模式之代理模式:原理与应用解析
    在设计模式中,代理模式通过一个代理对象来控制对真实对象的访问。UML图展示了代理类(如MathProxy)维护了一个引用,使得代理能够访问实际的主题对象。代理模式不仅能够延迟初始化昂贵的对象,还能在访问前后添加额外的操作,如权限检查或日志记录。这种模式在远程服务调用、虚拟代理和智能引用等方面有广泛应用。 ... [详细]
  • 本周,我深入研究了 ECharts 插件的使用方法,整体感觉插件操作较为简便,但后台算法较为复杂。此外,我还学习了 MySQL 函数的新应用,进一步提升了数据库操作的灵活性。同时,分享了自己在 Python 书籍外借过程中的体验,总结了一些实用的借阅技巧和心得。 ... [详细]
  • CSS中的pointer-events属性详解与应用
    在CSS中,`pointer-events`属性是一个非常实用但常被忽视的功能。它主要用于控制元素是否响应鼠标事件。当一个元素覆盖在其他元素之上时,通过设置`pointer-events`属性,可以决定该元素是否能够接收鼠标点击、悬停等交互操作,从而实现更灵活的用户界面设计。例如,将`pointer-events`设置为`none`可以使元素透明地传递鼠标事件,方便实现复杂的叠加效果和交互逻辑。 ... [详细]
  • 本文详细解析了CSS背景属性的简写顺序,包括背景颜色、背景图像、背景重复方式、背景固定方式等关键要素,帮助开发者更好地理解和应用这一重要样式规则。通过具体示例和实际应用场景,文章深入探讨了每个属性在简写形式中的排列和作用,为前端开发提供了实用的参考。 ... [详细]
  • 在Unity中,人物服装更换系统的优化与实现涉及多个关键技术点。本文重点探讨了SkinnedMeshRenderer组件的作用及其优化方法。SkinnedMeshRenderer负责角色模型的网格渲染,通过合理配置其属性,如材质和骨骼权重,可以显著提升服装更换的效率和效果。此外,文章还介绍了如何利用Unity的动画系统和脚本编程,实现动态的服装更换功能,以提高用户体验和游戏性能。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
author-avatar
一鳞半爪恋歌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有