博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
合并排序(非哨兵方法)
阅读量:6873 次
发布时间:2019-06-26

本文共 1679 字,大约阅读时间需要 5 分钟。

//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) //如果左边小,将左边的值放入原数组 { *iterArray = *iterLeft; ++iterLeft; ++iterArray; } else //如果右边小,将右边的值放入原数组 { *iterArray = *iterRight; ++iterRight; ++iterArray; } } //左边为空 if(iterLeft==arrayLeft.end()) { //将右边剩下的数据复制到原数组 //array.erase(iterArray, iterEnd); //array.insert(iterArray, iterRight, arrayRight.end()); while(iterRight != arrayRight.end()) { *iterArray = *iterRight; ++iterRight; ++iterArray; } } //右边为空 if(iterRight==arrayRight.end()) { //将左边剩下数据复制到原数组 //array.erase(iterArray, iterEnd); //array.insert(iterArray, iterLeft, arrayLeft.end()); while(iterLeft != arrayLeft.end()) { *iterArray = *iterLeft; ++iterLeft; ++iterArray; } } return; }

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

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

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

你可能感兴趣的文章
Sublime Text 3编辑器的SublimeRPEL快捷键设置
查看>>
ScrollView嵌套GridView的解决办法
查看>>
【学习笔记】JDBC数据库连接技术(Java Database Connectivity)
查看>>
20180206
查看>>
乐鲜生活后台管理系统--项目总结
查看>>
斐波那契数列 二进制数列
查看>>
读书笔记--SQL必知必会01--了解SQL
查看>>
三:Ionic Framework开发Android应用
查看>>
解析函数的反函数也是解析函数
查看>>
Elementary Methods in Number Theory Exercise 1.4.24,1.4.25,1.26,1.27,1.28
查看>>
陶哲轩实分析定理17.3.8 (二)
查看>>
JVM监控配置及Tomcat配置
查看>>
Untiy3D按方向键获取值
查看>>
20、AngularJs知识点总结 part-2
查看>>
[转载]项目风险管理七种武器-长生剑
查看>>
第10件事 向优秀产品学习的学问
查看>>
儿子和女儿——解释器和编译器的区别与联系
查看>>
C#线程
查看>>
C#中的?和??,null和Nullable
查看>>
7-Python与设计模式--适配器模式
查看>>