合并排序的合并操作不使用 C++ 向量
Posted
技术标签:
【中文标题】合并排序的合并操作不使用 C++ 向量【英文标题】:Merge operation of merge sort not working using c++ vectors 【发布时间】:2018-04-05 10:15:55 【问题描述】:#include <iostream>
#include<vector>
std::vector<int> print(std::vector<int> answerVec)
for(int i = 0; i < answerVec.size(); i++)
std::cout<<answerVec.at(i)<<" ";
std::cout<<"\n";
return answerVec;
std::vector<int> Merge(std::vector<int> left, std::vector<int> right)
int leftSize = left.size();
int rightSize = right.size();
std::vector<int> finalVector;
int leftIterator = 0, rightIterator = 0;
while(leftIterator < leftSize && rightIterator < rightSize)
//std::cout<<"Left"<<left.at(leftIterator)<<"\n";
//std::cout<<"Right"<<right.at(rightIterator)<<"\n";
if((int)left.at(leftIterator) <= (int)right.at(leftIterator))
finalVector.push_back(left.at(leftIterator));
leftIterator ++;
else
finalVector.push_back(right.at(rightIterator));
rightIterator++;
//print(finalVector);
while(leftIterator < leftSize)
finalVector.push_back(left.at(leftIterator));
leftIterator ++;
//print(finalVector);
while(rightIterator < rightSize)
finalVector.push_back(right.at(rightIterator));
rightIterator++;
//print(finalVector);
return finalVector;
int main()
std::vector<int> vecL,vecR,vec;
int n,input;
std::cin>>n;
for(int i = 0; i < n; i++)
std::cin>>input;
vecL.push_back(input);
for(int i = 0; i < n; i ++)
std::cin>>input;
vecR.push_back(input);
vec = Merge(vecL, vecR);
for(int i = 0; i < vec.size(); i++)
std::cout<<vec.at(i)<<" ";
return 0;
当我将两个排序向量作为参数传递时,上面的 Merge 函数无法正常运行。现在已经尝试了一段时间,但无法使其工作。评论了一些我用于调试的打印语句。任何帮助将不胜感激。
提前致谢
【问题讨论】:
【参考方案1】:if((int)left.at(leftIterator) <= (int)right.at(leftIterator))
这里,第二个leftIterator
应该是rightIterator
。
【讨论】:
看到自己的错误后想把头撞到墙上的那些日子......谢谢 @SandeepWalia 下一个好问题是如何防止这种愚蠢的错误,但在这种特殊情况下,我很遗憾没有一个令人信服的答案。 一种解决方法可能是使用 const 迭代器而不是索引?这样left和right只被提及一次。 作为一个小改进,请保留您的最终矢量以保存调整大小? @GemTaylor 啊,对!真正的iterator(与整数索引相反)是对向量和其中位置的提及。以上是关于合并排序的合并操作不使用 C++ 向量的主要内容,如果未能解决你的问题,请参考以下文章